in reference to NH Mapping Attributes: +1 for Diego's suggestion. FNH or HBMs are the way to go. in reference to NHV: check out Fabio's blog (http:// fabiomaulo.blogspot.com/). there is alot of content on Validation over the last several months. I would start with just getting NH up and running. then introduce NHV. For schema migration use the SchemaExport object to drop/create the database.
On Jan 20, 2:28 pm, Sam Kimmel <[email protected]> wrote: > The reason I chose NHibernate.Mapping.Attributes was that I planned on > decorating my domain objects with validation attributes from the > NHibernate.Validator. Figured if I was going to put in those attributes I > might as well skip the .hbm.xml files and just utilize the attributes. But > I'm also having problems with the Validator; not sure if I am > misunderstanding something, or if my project needs to be set up differently > (as a single project, rather than a project for the core [Domain objects] > and a project for the business logic). I thought that the validator could > dynamically modify the config so that the hbm2ddl SchemaExport would take > into account things like not-null and max lengths. Am I doing something > wrong here? How do I get the validator to inject the property restraints > into the schema export? > > I picked up the configuration example > fromhttp://www.mail-archive.com/[email protected]/msg00952.html > > =========================== > My SessionManager Constructor > =========================== > static NHibernateSessionManager() > { > if (config == null) > { > using (MemoryStream stream = new MemoryStream()) > { > config = new Configuration().Configure(); > > //NHibernate.Mapping.Attributes > HbmSerializer.Default.HbmNamespace = > "MyProj.Core.Domain"; > HbmSerializer.Default.HbmAssembly = "MyProj.Core"; > HbmSerializer.Default.Validate = true; > HbmSerializer.Default.Serialize(stream, > typeof(MyProj.Core.Domain.User).Assembly); > stream.Position = 0; > config.AddInputStream(stream, "Domain.hbm.xml"); > > //NHibernate.Validator > > NHibernate.Validator.Cfg.ValidatorInitializer.Initialize(config); > > NHibernate.Validator.Cfg.Environment.SharedEngineProvider = new > NHibernate.Validator.Event.NHibernateSharedEngineProvider(); > > sessionFactory = config.BuildSessionFactory(); > } > } > } > > On Wed, Jan 20, 2010 at 11:43 AM, Diego Mijelshon > <[email protected]>wrote: > > > Someone might have a better answer, but my suggestion is that you switch to > > HBM or Fluent mapping. > > Almost nobody uses NHibernate.Mapping.Attributes, so it's not being > > maintained a lot. > > Neither HBM nor Fluent have that problem, and they are just as easy to use. > > > Diego > > > On Wed, Jan 20, 2010 at 14:31, Sam Kimmel <[email protected]> wrote: > > >> After a couple days of tinkering around I was able to get > >> NHibernate.Mapping.Attributes (2.1 GA) to work. Does anyone know why I > >> need to explicitly specify the Class name or the type of the ID in the > >> attributes? It is smart enough to figure out the names and types of > >> the properties without explicitly setting them, but can't pick up the > >> class name or id type for some reason. > > >> I've supplied the working bits of code below...maybe there is > >> something I am missing: > > >> ================================================================== > >> User Class (located in "MyProject.Core" assembly, > >> "MyProject.Core.Domain" namespace) > >> ================================================================== > >> [Serializable()] > >> [Class(Name="User", Table="tw_users")] > >> public class User > >> { > >> [Id(UnsavedValue="0", Type="int"), Generator(Class = > >> "native")] > >> public virtual int UserId { get; set; } > > >> [Property(Length = 50, NotNull = true)] > >> public virtual string Name { get; set; } > > >> [Property(Length = 128, NotNull = true, Unique = true)] > >> public virtual string Email { get; set; } > > >> [Property(Length = 40, NotNull = true)] > >> public virtual string Password { get; set; } > > >> [Property(NotNull = true)] > >> public virtual bool Approved { get; set; } > > >> [Property(NotNull = true)] > >> public virtual DateTime CreatedOn { get; set; } > >> } > > >> ======================================= > >> Session Helper (located in MyProject.Data assembly) > >> ======================================= > >> public sealed class NHibernateSessionManager > >> { > >> private static Configuration config = null; > >> private static ISessionFactory sessionFactory = null; > > >> static NHibernateSessionManager() > >> { > >> if (config == null) > >> { > >> using (MemoryStream stream = new > >> MemoryStream()) > >> { > >> HbmSerializer.Default.HbmNamespace > >> = "MyProject.Core.Domain"; > >> HbmSerializer.Default.HbmAssembly = > >> "MyProject.Core"; > >> HbmSerializer.Default.Validate = > >> true; > > >> HbmSerializer.Default.Serialize(stream, typeof > >> (Tectonic.Core.Domain.User).Assembly); > >> stream.Position = 0; > >> config = new > >> Configuration().Configure(); > >> config.AddInputStream(stream, > >> "Domain.hbm.xml"); > >> sessionFactory = > >> config.BuildSessionFactory(); > >> } > >> } > >> } > > >> public static ISession OpenSession() > >> { > >> return sessionFactory.OpenSession(); > >> } > > >> public static IStatelessSession OpenStatelessSession() > >> { > >> return sessionFactory.OpenStatelessSession(); > >> } > > >> // Remove from release -- completely destroys and rebuilds > >> db from > >> domain model > >> public static void BuildDb() > >> { > >> new > >> NHibernate.Tool.hbm2ddl.SchemaExport(config).Execute(false, > >> true, false); > >> } > >> } > > >> -- > >> You received this message because you are subscribed to the Google Groups > >> "nhusers" group. > >> To post to this group, send email to [email protected]. > >> To unsubscribe from this group, send email to > >> [email protected]<nhusers%[email protected]> > >> . > >> For more options, visit this group at > >>http://groups.google.com/group/nhusers?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "nhusers" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<nhusers%[email protected]> > > . > > For more options, visit this group at > >http://groups.google.com/group/nhusers?hl=en.
-- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
