annotate Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 298:9bc60d166c8a

Se corrigieron los tests por el cambio de Patrocinador, para que no persista el logo en disco. Se comentó el código de PatrocinadorApiController, que no se utiliza.
author juanjose.montesdeocaarbos
date Sun, 19 Feb 2012 16:00:38 -0300
parents eeca9ddb330a
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 }