0

Fluent NHibernate と NHibernate Validator を連携させるのに苦労していますが、これを行う最善の方法に関するドキュメントがインターネット上にないようです。バリデーターと NHibernate を構成する方法を詳しく説明している Web サイトをいくつか見つけましたが、Fluent NHibernate については説明していません。Fluent NHibernate は適切なマッピングを備えた単なる NHibernate であることに気付きましたが、構成について頭を悩ませることはできません。

これは、セットアップに使用するコードですSessionFactory

public static void Initialise()
{
    Configuration config =  Fluently.Configure()
                                      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c
                                        .Server("")
                                        .Database("")
                                        .Username("")
                                        .Password("")))
                                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Map>()
                                        .Conventions.AddFromAssemblyOf<EnumConvention>())
                                      .BuildConfiguration();

    DataBindingInterceptor interceptor = new DataBindingInterceptor();
    SessionFactory = config
                       .SetInterceptor(interceptor)
                       .BuildSessionFactory();

}

この質問から、バリデーターをセットアップするために次のようなメソッドを作成しようとしました。

private static void ConfigureValidator(Configuration config)
{
    NHibernate.Validator.Cfg.Environment.SharedEngineProvider = new SharedValidatorProvider();
    var nhvc = new NHVConfiguration();
    nhvc.Properties[NHibernate.Validator.Cfg.Environment.ApplyToDDL] = "true";
    nhvc.Properties[NHibernate.Validator.Cfg.Environment.AutoregisterListeners] = "true";
    nhvc.Properties[NHibernate.Validator.Cfg.Environment.ValidatorMode] = "UseAttribute";

    var ve = new ValidatorEngine();
    ve.Configure(nhvc);
    ValidatorInitializer.Initialize(config, ve);
}

SharedValidatorProviderただし、との名前空間を見つけようとしてエラーが発生しましたNHVConfiguration。プロジェクトで参照されているCastle.Core、FluentNHibernate、NHibernate、NHibernate.ByteCode.Castle、NHibernate.Validator、およびNHibernate.Validator.Specific DLLがあり、次usingのものがあります。

using NHibernate.Validator.Engine;
using NHibernate.Validator.Event;
using NHibernate.Validator.Cfg;
using NHibernate.Cfg;
using NHibernate;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;

Fluent NHibernate と NHibernate Validator がうまく連携できるよう、ご協力をお願いします。うまくいけば、人々が将来これをやろうとするとき、これが決定的なソースになるでしょう!

4

1 に答える 1

2

上記のコードではなくNHibernateSharedEngineProvider、必要だと思います。使用するには、次 を使用する必要があります。 SharedValidatorProviderNHibernateSharedEngineProvider

using NHibernate.Validator.Event;

NHVConfigurationは参照しているその投稿の変数であり、タイプではありません。その投稿をもっと詳しく見る必要があると思います。

また、メモです。タイプを見つけるのに問題がある場合は、VisualStudioのオブジェクトブラウザがお勧めです。プロジェクトに含まれているすべてのアセンブリを検索する機能があります。

編集:

以下は、私が現在行っていることですが、上記で必要なものを変更しましたが、代わりにNHVが流暢に構成されています。

public static void Initialise()
{
    //Read the configuration from hibernate.xml.cfg or app.config
    private static NHibernate.Cfg.Configuration normalConfig = new NHibernate.Cfg.Configuration().Configure();

    ConfigureNhibernateValidator(normalConfig);

    Configuration config =  Fluently.Configure(normalConfig)
                                      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c
                                        .Server("")
                                        .Database("")
                                        .Username("")
                                        .Password("")))
                                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Map>()
                                        .Conventions.AddFromAssemblyOf<EnumConvention>())
                                      .BuildConfiguration();

    DataBindingInterceptor interceptor = new DataBindingInterceptor();
    SessionFactory = config
                       .SetInterceptor(interceptor)
                       .BuildSessionFactory();

}

    private static void ConfigureNhibernateValidator(NHibernate.Cfg.Configuration config)
    {
        var provider = new NHibernateSharedEngineProvider();
        NHibernate.Validator.Cfg.Environment.SharedEngineProvider = provider;

        var nhvConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();
        nhvConfiguration
           .SetDefaultValidatorMode(ValidatorMode.UseAttribute)
           .Register(Assembly.Load("Namespace.To.Business.Objects")
           .ValidationDefinitions())
           .IntegrateWithNHibernate
               .ApplyingDDLConstraints()
               .RegisteringListeners();

        ValidatorEngine validatorEngine = NHibernate.Validator.Cfg.Environment.SharedEngineProvider.GetEngine();
        validatorEngine.Configure(nhvConfiguration);

        ValidatorInitializer.Initialize(config, validatorEngine);
    }
于 2011-08-23T21:43:57.793 に答える