Mercurial > altnet-hispano
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 | 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 | 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 | 39 orm.ManyToMany<Evento, Persona>(); |
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 | 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 | 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 | 73 private static void ColumnsNamingPatterns(Mapper mapper) |
74 { | |
75 //mapper.AddPoidPattern(mi => IsMemberOfClassOfAgendas(mi) && mi.Name == "Id", | |
76 //(mi, idm) => idm.Column(mi.ReflectedType.Name + "Id")); | |
77 //mapper.AddCollectionPattern(IsMemberOfClassOfAgendas, (mi, cm) => cm.Key(km => km.Column(mi.DeclaringType.Name + "Id"))); | |
78 //mapper.AddManyToOnePattern(IsMemberOfClassOfAgendas, (mi, idm) => idm.Column(mi.GetPropertyOrFieldType().Name + "Id")); | |
79 } | |
80 | |
81 private static bool IsMemberOfClassOfAgendas(MemberInfo mi) | |
82 { | |
83 return mi.ReflectedType.Assembly == typeof(Evento).Assembly; | |
84 } | |
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 } |