0

我正在努力让 Fluent NHibernate 和 NHibernate Validator 一起工作,并且互联网上似乎缺乏关于最佳方式的文档。我发现一些网站详细介绍了如何配置验证器和 NHibernate,但不包括 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);
}

但是,我在尝试查找SharedValidatorProviderand的命名空间时遇到了错误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不是 SharedValidatorProvider在上面的代码中。要使用NHibernateSharedEngineProvider,您需要以下使用:

using NHibernate.Validator.Event;

NHVConfiguration是您所指的该帖子中的变量,而不是类型。我认为您需要更仔细地查看该帖子。

也只是一个注释。如果您在查找类型时遇到困难,Visual Studio 中的对象浏览器就是您的朋友。它能够搜索您在项目中包含的所有程序集。

编辑:

下面是我目前正在做的修改你想要的上面但 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 回答