Col*_*e W 3 nhibernate fluent-nhibernate nhibernate-validator
我在让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);
}
Run Code Online (Sandbox Code Playgroud)
我现在已经多次查看过这个配置并搜索了互联网,试图找出这个有什么问题.我还查看了NHV源中提供的示例,但我无法弄清楚为什么我的单元测试不会抛出InvalidStateException.我有一个单元测试来验证应该失败的同一个实体,它通过验证引擎直接验证它,这是有效的.
有没有人看到上述配置有什么问题?
我正在使用NHibernate 3.1,NHibernate Validator 1.3和Fluent NHibernate 1.2.0.712
我调试了这个,似乎当它验证我的实体时,它再次初始化我的验证器引擎.我通过将上面的ConfigureNhibernateValidator(配置配置)方法更改为以下内容来解决此问题(此处的关键是设置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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1633 次 |
最近记录: |