NHibernate Validator не интегрируется с Fluent NHibernate
У меня возникли проблемы с тем, чтобы заставить 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.1, NHibernate Validator 1.3 и Fluent NHibernate 1.2.0.712
1 ответ
Я отладил это, и мне показалось, что когда он проверял мою сущность, он снова инициализировал мой механизм валидатора. Я исправил это, изменив вышеописанный метод 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);
}