Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 243:59f8fa2f835e
Ticket 177: Valor de Duración de VAN en 0.
author | juanjose.montesdeocaarbos |
---|---|
date | Thu, 06 Oct 2011 08:13:05 -0300 |
parents | c61954d24c8c |
children | 72a96459f910 |
line wrap: on
line source
using System.Reflection; using AltNetHispano.Agendas.Domain; using ConfOrm; using ConfOrm.NH; using NHibernate; using NHibernate.Cfg; using NHibernate.Cfg.MappingSchema; using NHibernate.Tool.hbm2ddl; namespace Agendas.NHibernate { public static class NhHelper { private static ISessionFactory _sessionfactory; private static Configuration _cfg; public static Configuration GetConfiguration() { if (_cfg == null) { var mapping = GetMapping(); _cfg = new Configuration(); _cfg.Configure(); _cfg.AddDeserializedMapping(mapping, null); } return _cfg; } public static HbmMapping GetMapping() { var orm = new ObjectRelationalMapper(); orm.TablePerClass<Persona>(); orm.TablePerClass<Evento>(); orm.Complex<Evento>(e => e.Estado); orm.Bag<Evento>(e=>e.Ponentes); orm.ManyToMany<Evento, Persona>(); orm.TablePerClass<Track>(); orm.TablePerClass<TrackLog>(); orm.TablePerClass<Cuenta>(); //orm.TablePerClass<Patrocinador>(); orm.Cascade<Evento, Persona>(Cascade.None); orm.Cascade<Persona, Evento>(Cascade.None); orm.Cascade<Persona, Cuenta>(Cascade.All | Cascade.DeleteOrphans); orm.Bag<Persona>(p => p.Roles); var mapper = new Mapper(orm); ColumnsNamingPatterns(mapper); mapper.Customize<Persona>(a => a.Property(p => p.Nombre, m => m.Unique(true))); mapper.Customize<Persona>(a => a.Property(p => p.Twitter, m => m.Unique(true))); mapper.Class<Persona>( ca => ca.Bag( p => p.Roles, cm => cm.Key(em => em.Column("Persona")), m => m.Element(em => em.Column("Rol")))); mapper.Customize<Evento>(a => a.Property(p => p.Titulo, m => m.Unique(true))); mapper.Customize<Evento>(e=>e.Property(p=>p.Estado, a=>a.Type<EventoStateType>()) ); return mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes()); } private static void ColumnsNamingPatterns(Mapper mapper) { //mapper.AddPoidPattern(mi => IsMemberOfClassOfAgendas(mi) && mi.Name == "Id", //(mi, idm) => idm.Column(mi.ReflectedType.Name + "Id")); //mapper.AddCollectionPattern(IsMemberOfClassOfAgendas, (mi, cm) => cm.Key(km => km.Column(mi.DeclaringType.Name + "Id"))); //mapper.AddManyToOnePattern(IsMemberOfClassOfAgendas, (mi, idm) => idm.Column(mi.GetPropertyOrFieldType().Name + "Id")); } private static bool IsMemberOfClassOfAgendas(MemberInfo mi) { return mi.ReflectedType.Assembly == typeof(Evento).Assembly; } public static ISessionFactory GetSessionFactory() { if (_sessionfactory == null) { var cfg = GetConfiguration(); #if DEBUG var schemaValidator = new SchemaValidator(cfg); schemaValidator.Validate(); #endif _sessionfactory = cfg.BuildSessionFactory(); } return _sessionfactory; } } }