3

NHVをFluentNHibernateと連携させるのに問題があります。私が持っている単体テストには、検証に失敗する必要があるエンティティがあり、最終的に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.3FluentNHibernate1.2.0.712を使用しています

4

1 に答える 1

5

私はこれをデバッグしました、そしてそれが私のエンティティを検証しようとしたとき、それは私のバリデーターエンジンを再び初期化したようでした。上記の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);
    }
于 2011-04-10T20:37:41.483 に答える