The main documentation for the NHibernate Validator is here:
http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx
And it alludes to the fact that you can configure the validator to be called automatically before Insert/Update.
However, it fails to clearly communicate how to do this.
The important missing piece is that "ValidatorInitializer.Initialize()" needs to be called before the session factory gets created.
Here is some working sample code:
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Northwind"].ToString();
NHibernate.Validator.Engine.ValidatorEngine oneValidatorEngine = new NHibernate.Validator.Engine.ValidatorEngine();
NHibernate.Validator.Cfg.INHVConfiguration oneINHVConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();//oneINHVConfiguration.Properties[NHibernate.Validator.Cfg.Environment.AutoregisterListeners] = "true";oneINHVConfiguration.Properties[NHibernate.Validator.Cfg.Environment.ValidatorMode] = "UseExternal";oneINHVConfiguration.Mappings.Add(new NHibernate.Validator.Cfg.MappingConfiguration("YourNamespaceGoesHere", null));oneValidatorEngine.Configure(oneINHVConfiguration);
NHibernate.Cfg.Configuration nHibernateConfiguration = new NHibernate.Cfg.Configuration();nHibernateConfiguration.SetProperty(NHibernate.Cfg.Environment.ConnectionString, connectionString);nHibernateConfiguration.SetProperty(NHibernate.Cfg.Environment.Dialect, typeof(NHibernate.Dialect.MsSql2005Dialect).AssemblyQualifiedName);nHibernateConfiguration.SetProperty(NHibernate.Cfg.Environment.ProxyFactoryFactoryClass, typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName);nHibernateConfiguration.AddAssembly(System.Reflection.Assembly.GetCallingAssembly());
NHibernate.Validator.Cfg.ValidatorInitializer.Initialize(nHibernateConfiguration, oneValidatorEngine);
NHibernate.ISessionFactory oneISessionFactory = nHibernateConfiguration.BuildSessionFactory();
This code throws an NHibernate.PropertyValueException instead of an NHibernate.Exceptions.GenericADOException / System.Data.SqlClient.SqlException, which is what we want in this case. Another exception I've seen the NHibernate Validator throw is NHibernate.Validator.Exceptions.InvalidStateException.
It's much easier and more pleasant to try to recover from a validation error than a database error.
Remember Me
Powered by: newtelligence dasBlog 1.8.5223.2
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.
© Copyright 2010, Michael Maddox
E-mail