NHibernate Validator не интегрируется с Fluent NHibernate - PullRequest
3 голосов
/ 08 апреля 2011

У меня проблемы с настройкой 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 и Свободный NHibernate 1.2.0.712

1 Ответ

5 голосов
/ 11 апреля 2011

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