Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 193:523e3586b1c1
Combinar
author | juanjose.montesdeocaarbos |
---|---|
date | Wed, 10 Aug 2011 08:21:32 -0300 |
parents | 5a1f7233aa5a |
children | 5346c0500594 |
rev | line source |
---|---|
143 | 1 using AltNetHispano.Agendas.Domain; |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
2 using ConfOrm; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
3 using ConfOrm.NH; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
4 using NHibernate; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
5 using NHibernate.Cfg; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
6 using NHibernate.Tool.hbm2ddl; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
7 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
8 namespace Agendas.NHibernate |
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 public static class NhHelper |
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 private static ISessionFactory _sessionfactory; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
13 private static Configuration _cfg; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
14 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
15 public static Configuration GetConfiguration() |
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 if (_cfg == null) |
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 var orm = new ObjectRelationalMapper(); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
80
diff
changeset
|
20 orm.TablePerClass<Persona>(); |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
21 orm.TablePerClass<Evento>(); |
140
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
22 |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
23 orm.Complex<Evento>(e => e.Estado); |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
24 |
80
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
25 orm.TablePerClass<Track>(); |
111
90ce239cfa6d
Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
26 orm.TablePerClass<TrackLog>(); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
80
diff
changeset
|
27 orm.TablePerClass<Cuenta>(); |
137 | 28 orm.TablePerClass<Patrocinador>(); |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
29 |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
80
diff
changeset
|
30 orm.Cascade<Evento, Persona>(Cascade.None); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
80
diff
changeset
|
31 orm.Cascade<Persona, Evento>(Cascade.None); |
140
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
32 |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
111
diff
changeset
|
33 orm.Cascade<Persona, Cuenta>(Cascade.All | Cascade.DeleteOrphans); |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
34 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
35 var mapper = new Mapper(orm); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
36 |
143 | 37 mapper.Customize<Persona>(a => a.Property(p => p.Nombre, m => m.Unique(true))); |
38 mapper.Customize<Persona>(a => a.Property(p => p.Twitter, m => m.Unique(true))); | |
39 | |
147 | 40 mapper.Customize<Evento>(a => a.Property(p => p.Titulo, m => m.Unique(true))); |
41 | |
140
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
42 mapper.AddPropertyPattern(p => p.DeclaringType == typeof(Evento) && p.Name == "Estado", a => a.Type<EventoStateType>()); |
3639803112c6
Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
137
diff
changeset
|
43 |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
44 var mapping = mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes()); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
45 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
46 _cfg = new Configuration(); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
47 _cfg.Configure(); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
48 _cfg.AddDeserializedMapping(mapping, null); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
49 } |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
50 return _cfg; |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
51 } |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
52 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
53 public static ISessionFactory GetSessionFactory() |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
54 { |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
55 if (_sessionfactory == null) |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
56 { |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
57 var cfg = GetConfiguration(); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
58 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
59 #if DEBUG |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
60 var schemaValidator = new SchemaValidator(cfg); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
61 try |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
62 { |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
63 schemaValidator.Validate(); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
64 } |
80
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
65 catch |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
66 { |
80
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
67 try |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
68 { |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
69 var schemaUpdate = new SchemaUpdate(cfg); |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
70 schemaUpdate.Execute(false, true); |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
71 |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
72 schemaValidator.Validate(); |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
73 } |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
74 catch |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
75 { |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
76 var schemaExport = new SchemaExport(cfg); |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
77 schemaExport.Create(false, true); |
c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
nelopauselli
parents:
67
diff
changeset
|
78 } |
67
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
79 } |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
80 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
81 #endif |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
82 |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
83 _sessionfactory = cfg.BuildSessionFactory(); |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
84 } |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
85 return _sessionfactory; |
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 } |
c8099df941bd
Implementando persistencia con NHibernate en el proyecto web
nelopauselli
parents:
diff
changeset
|
88 } |