annotate Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 287:eeca9ddb330a

BUG: Los Patrocinadores quedaban asociados a un único evento. Se armó un test que lo demuestra y se modificó el modelo de la base de datos.
author juanjose.montesdeocaarbos
date Mon, 02 Jan 2012 19:44:41 -0300
parents 72a96459f910
children
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
235
c61954d24c8c Quitando ponente principal y utilizando siempre la lista de ponentes
nelopauselli
parents: 225
diff changeset
38 orm.Bag<Evento>(e=>e.Ponentes);
225
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>();
274
72a96459f910 Ticket #123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents: 235
diff changeset
44 orm.TablePerClass<Patrocinador>();
287
eeca9ddb330a BUG: Los Patrocinadores quedaban asociados a un único evento. Se armó un test que lo demuestra y se modificó el modelo de la base de datos.
juanjose.montesdeocaarbos
parents: 274
diff changeset
45 orm.ManyToMany<Evento, Patrocinador>();
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
46
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
47 orm.Cascade<Evento, Persona>(Cascade.None);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
48 orm.Cascade<Persona, Evento>(Cascade.None);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
49
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
50 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
51
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
52 orm.Bag<Persona>(p => p.Roles);
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
53
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
54 var mapper = new Mapper(orm);
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
55 ColumnsNamingPatterns(mapper);
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
56
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.Nombre, m => m.Unique(true)));
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
58 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
59
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
60 mapper.Class<Persona>(
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
61 ca => ca.Bag(
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
62 p => p.Roles,
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
63 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
64 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
65
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
66 mapper.Customize<Evento>(a => a.Property(p => p.Titulo, m => m.Unique(true)));
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
67 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
68
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
69 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
70
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
71 }
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
72
225
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
73 private static void ColumnsNamingPatterns(Mapper mapper)
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
74 {
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
75 //mapper.AddPoidPattern(mi => IsMemberOfClassOfAgendas(mi) && mi.Name == "Id",
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
76 //(mi, idm) => idm.Column(mi.ReflectedType.Name + "Id"));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
77 //mapper.AddCollectionPattern(IsMemberOfClassOfAgendas, (mi, cm) => cm.Key(km => km.Column(mi.DeclaringType.Name + "Id")));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
78 //mapper.AddManyToOnePattern(IsMemberOfClassOfAgendas, (mi, idm) => idm.Column(mi.GetPropertyOrFieldType().Name + "Id"));
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
79 }
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
80
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
81 private static bool IsMemberOfClassOfAgendas(MemberInfo mi)
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
82 {
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
83 return mi.ReflectedType.Assembly == typeof(Evento).Assembly;
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
84 }
f23ee59ef1bd Otros ponentes
nelopauselli
parents: 200
diff changeset
85
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
86 public static ISessionFactory GetSessionFactory()
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
87 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
88 if (_sessionfactory == null)
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
89 {
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
90 var cfg = GetConfiguration();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
91
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
92 #if DEBUG
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
93 var schemaValidator = new SchemaValidator(cfg);
200
5346c0500594 Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents: 147
diff changeset
94 schemaValidator.Validate();
67
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
95 #endif
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
96
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
97 _sessionfactory = cfg.BuildSessionFactory();
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
98 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
99 return _sessionfactory;
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 }
c8099df941bd Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff changeset
102 }