NHibernate的验证不与流利的NHibernate集成 [英] NHibernate Validator not integrating with Fluent NHibernate

查看:167
本文介绍了NHibernate的验证不与流利的NHibernate集成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些麻烦让NHV与流利NHibernate的工作。一个单元测试,我有一个实体,应该失败验证最终抛出一个ADO异常。我有NHV配置以下方式:

pre $私有静态无效初始化
{
_SessionFactory =流利.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(的connectionString)
.ShowSql())
.Mappings(M =>
m.FluentMappings.AddFromAssemblyOf<会话工厂> ;()
.ExportTo(pathToExportMappingsTo))
.ProxyFactoryFactory( NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu)
.ExposeConfiguration(ConfigureNhibernateValidator)
。 BuildSessionFactory();
}

私有静态无效ConfigureNhibernateValidator(配置配置)
{
变种nhvConfiguration =新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);

$ / code>

我已经多次查看了这个配置,然后搜索了互联网并找出这是什么问题。我也看了NHV源代码中提供的例子,但是我一直无法弄清楚为什么我的单元测试不会抛出一个InvalidStateException异常。我有一个单元测试来验证相同的实体应该失败,通过验证引擎直接验证它,这是有效的。



有人看到上面的配置有什么问题吗?



我正在使用 NHibernate 3.1 NHibernate Validator 1.3 连贯NHibernate 1.2.0.712

我调试了这个,它似乎是当它去验证我的实体它是初始化我的验证引擎再次。我通过改变上面的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);
}


I'm having some trouble getting NHV to work with Fluent NHibernate. A unit test that I have that has an entity that SHOULD be failing validation ends up throwing an ADO exception. I have NHV configured the following way:

    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);
    }

I've looked over this configuration several times now and scoured the internet to try and find out what's wrong with this. I've also looked at examples provided in the NHV source but I haven't been able to figure out why my unit test does not throw an InvalidStateException. I have a unit test to validate the same entity that should be failing that validates it directly via the validation engine and this works.

Does anyone see anything wrong with the above configuration?

I'm using NHibernate 3.1, NHibernate Validator 1.3 and Fluent NHibernate 1.2.0.712

解决方案

I debugged this and it seemed that when it went to validate my entity it was initialize my validator engine again. I corrected this by changing the ConfigureNhibernateValidator(Configuration config) method above to the following (the key here was to set the 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);
    }

这篇关于NHibernate的验证不与流利的NHibernate集成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆