首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置Fluent NHibernate和NHibernate验证器

配置Fluent NHibernate和NHibernate验证器
EN

Stack Overflow用户
提问于 2011-08-24 05:13:07
回答 1查看 2.6K关注 0票数 0

我正在努力让Fluent NHibernate和NHibernate验证器一起工作,而互联网上似乎缺乏关于最佳方法的文档。我找到了一些网站,它们详细介绍了如何配置验证器和NHibernate,但没有流畅的NHibernate。我意识到Fluent NHibernate只是一个带有良好映射的NHibernate,但是我不能完全理解它的配置。

这是我用来设置SessionFactory的代码

代码语言:javascript
复制
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();

}

this question中,我尝试创建一个如下所示的方法来设置我的验证器:

代码语言:javascript
复制
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);
}

但是,我在尝试查找SharedValidatorProviderNHVConfiguration的名称空间时遇到错误。我在项目中引用了Castle.Core、FluentNHibernate、NHibernate、NHibernate.ByteCode.Castle、NHibernate.Validator和NHibernate.Validator.Specific DLL以及以下using

代码语言:javascript
复制
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验证器愉快地协同工作。希望这将成为未来人们尝试做这件事的权威来源!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-24 05:43:58

我认为你在上面的代码中需要的是NHibernateSharedEngineProvider,而不是 SharedValidatorProvider。要使用NHibernateSharedEngineProvider,您需要使用以下各项:

代码语言:javascript
复制
using NHibernate.Validator.Event;

NHVConfiguration是您引用的post中的一个变量,而不是a type。我认为你需要更仔细地看看这篇文章。

也只是一张纸条。如果您在查找类型时遇到困难,visual studio中的对象浏览器是您的好朋友。它能够搜索项目中包含的所有程序集。

编辑:

下面是我目前正在做的,修改了上面你想要的,但是NHV被流畅地配置了:

代码语言:javascript
复制
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);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7167615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档