我正在努力让Fluent NHibernate和NHibernate验证器一起工作,而互联网上似乎缺乏关于最佳方法的文档。我找到了一些网站,它们详细介绍了如何配置验证器和NHibernate,但没有流畅的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();
}在this question中,我尝试创建一个如下所示的方法来设置我的验证器:
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验证器愉快地协同工作。希望这将成为未来人们尝试做这件事的权威来源!
发布于 2011-08-24 05:43:58
我认为你在上面的代码中需要的是NHibernateSharedEngineProvider和,而不是 SharedValidatorProvider。要使用NHibernateSharedEngineProvider,您需要使用以下各项:
using NHibernate.Validator.Event;NHVConfiguration是您引用的post中的一个变量,而不是a type。我认为你需要更仔细地看看这篇文章。
也只是一张纸条。如果您在查找类型时遇到困难,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);
}https://stackoverflow.com/questions/7167615
复制相似问题