gpt4 book ai didi

NHibernate Validator 未与 Fluent NHibernate 集成

转载 作者:行者123 更新时间:2023-12-02 14:42:29 24 4
gpt4 key购买 nike

我在让 NHV 与 Fluent NHibernate 配合使用时遇到一些问题。我的单元测试有一个应该验证失败的实体,最终会抛出 ADO 异常。我按照以下方式配置了 NHV:

    private static void Init()
{
_SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString)
.ShowSql())
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<SessionFactory>()
.ExportTo(pathToExportMappingsTo))
.ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")
.ExposeConfiguration(ConfigureNhibernateValidator)
.BuildSessionFactory();
}

private static void ConfigureNhibernateValidator(Configuration config)
{
var nhvConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();
nhvConfiguration
.SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal)
.Register(Assembly.Load("Business.Objects")
.ValidationDefinitions())
.IntegrateWithNHibernate
.RegisteringListeners();

ValidatorEngine validatorEngine = new ValidatorEngine();
validatorEngine.Configure(nhvConfiguration);

ValidatorInitializer.Initialize(config, validatorEngine);
}

我已经多次查看此配置,并在互联网上搜索以尝试找出问题所在。我还查看了 NHV 源中提供的示例,但我无法弄清楚为什么我的单元测试没有抛出 InvalidStateException。我有一个单元测试来验证应该失败的同一实体,该实体直接通过验证引擎对其进行验证,并且这是有效的。

有人发现上面的配置有什么问题吗?

我正在使用 NHibernate 3.1NHibernate Validator 1.3Fluent NHibernate 1.2.0.712

最佳答案

我对此进行了调试,似乎当它验证我的实体时,它再次初始化了我的验证器引擎。我通过将上面的ConfigureNhibernateValidator(Configuration config)方法更改为以下内容来纠正这个问题(这里的关键是设置SharedEngineProvider):

    private static void ConfigureNhibernateValidator(Configuration config)
{
var provider = new NHibernateSharedEngineProvider();
NHibernate.Validator.Cfg.Environment.SharedEngineProvider = provider;

var nhvConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();
nhvConfiguration
.SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal)
.Register(Assembly.Load("Business.Objects")
.ValidationDefinitions())
.IntegrateWithNHibernate
.AvoidingDDLConstraints()
.RegisteringListeners();

ValidatorEngine validatorEngine = NHibernate.Validator.Cfg.Environment.SharedEngineProvider.GetEngine();
validatorEngine.Configure(nhvConfiguration);

ValidatorInitializer.Initialize(config, validatorEngine);
}

关于NHibernate Validator 未与 Fluent NHibernate 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5590250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com