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);
    }
Другие вопросы по тегам