annotate Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 234:cc71f96ac134

Combinar
author juanjose.montesdeocaarbos
date Tue, 04 Oct 2011 20:36:27 -0300
parents f23ee59ef1bd
children c61954d24c8c
rev   line source
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
1 using System.Reflection;
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
2 using AltNetHispano.Agendas.Domain;
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
3 using ConfOrm;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
4 using ConfOrm.NH;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
5 using NHibernate;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
6 using NHibernate.Cfg;
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
7 using NHibernate.Cfg.MappingSchema;
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
8 using NHibernate.Tool.hbm2ddl;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
9
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
10 namespace Agendas.NHibernate
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
11 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
12 public static class NhHelper
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
13 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
14 private static ISessionFactory _sessionfactory;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
15 private static Configuration _cfg;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
16
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
17 public static Configuration GetConfiguration()
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
18 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
19 if (_cfg == null)
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
20 {
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
21 var mapping = GetMapping();
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
22
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
23 _cfg = new Configuration();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
24 _cfg.Configure();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
25 _cfg.AddDeserializedMapping(mapping, null);
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
26 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
27 return _cfg;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
28 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
29
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
30 public static HbmMapping GetMapping()
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
31 {
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
32 var orm = new ObjectRelationalMapper();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
33 orm.TablePerClass<Persona>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
34 orm.TablePerClass<Evento>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
35
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
36 orm.Complex<Evento>(e => e.Estado);
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
37
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
38 orm.Bag<Evento>(e=>e.OtrosPonentes);
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
39 orm.ManyToMany<Evento, Persona>();
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
40
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
41 orm.TablePerClass<Track>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
42 orm.TablePerClass<TrackLog>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
43 orm.TablePerClass<Cuenta>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
44 //orm.TablePerClass<Patrocinador>();
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
45
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
46 orm.Cascade<Evento, Persona>(Cascade.None);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
47 orm.Cascade<Persona, Evento>(Cascade.None);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
48
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
49 orm.Cascade<Persona, Cuenta>(Cascade.All | Cascade.DeleteOrphans);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
50
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
51 orm.Bag<Persona>(p => p.Roles);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
52
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
53 var mapper = new Mapper(orm);
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
54 ColumnsNamingPatterns(mapper);
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
55
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
56 mapper.Customize<Persona>(a => a.Property(p => p.Nombre, m => m.Unique(true)));
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
57 mapper.Customize<Persona>(a => a.Property(p => p.Twitter, m => m.Unique(true)));
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
58
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
59 mapper.Class<Persona>(
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
60 ca => ca.Bag(
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
61 p => p.Roles,
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
62 cm => cm.Key(em => em.Column("Persona")),
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
63 m => m.Element(em => em.Column("Rol"))));
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
64
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
65 mapper.Customize<Evento>(a => a.Property(p => p.Titulo, m => m.Unique(true)));
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
66 mapper.Customize<Evento>(e=>e.Property(p=>p.Estado, a=>a.Type<EventoStateType>()) );
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
67
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
68 return mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes());
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
69
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
70 }
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
71
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
72 private static void ColumnsNamingPatterns(Mapper mapper)
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
73 {
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
74 //mapper.AddPoidPattern(mi => IsMemberOfClassOfAgendas(mi) && mi.Name == "Id",
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
75 //(mi, idm) => idm.Column(mi.ReflectedType.Name + "Id"));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
76 //mapper.AddCollectionPattern(IsMemberOfClassOfAgendas, (mi, cm) => cm.Key(km => km.Column(mi.DeclaringType.Name + "Id")));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
77 //mapper.AddManyToOnePattern(IsMemberOfClassOfAgendas, (mi, idm) => idm.Column(mi.GetPropertyOrFieldType().Name + "Id"));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
78 }
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
79
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
80 private static bool IsMemberOfClassOfAgendas(MemberInfo mi)
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
81 {
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
82 return mi.ReflectedType.Assembly == typeof(Evento).Assembly;
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
83 }
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
84
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
85 public static ISessionFactory GetSessionFactory()
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
86 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
87 if (_sessionfactory == null)
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
88 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
89 var cfg = GetConfiguration();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
90
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
91 #if DEBUG
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
92 var schemaValidator = new SchemaValidator(cfg);
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
93 schemaValidator.Validate();
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
94 #endif
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
95
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
96 _sessionfactory = cfg.BuildSessionFactory();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
97 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
98 return _sessionfactory;
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
99 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
100 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
101 }