view Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs @ 132:45be716763c3

Se agrega configuración para el uso de Google Calendar. OJO que no se ha puesto el valor de la password de la cuenta de GCalendar.
author alabra
date Sun, 10 Jul 2011 23:55:56 -0400
parents 0bca45e1e664
children 2d1adbaf0373
line wrap: on
line source

using AltNetHispano.Agendas.Domain;
using ConfOrm;
using ConfOrm.NH;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;

namespace Agendas.NHibernate
{
	public static class NhHelper
	{
		private static ISessionFactory _sessionfactory;
		private static Configuration _cfg;

		public static Configuration GetConfiguration()
		{
			if (_cfg == null)
			{
				var orm = new ObjectRelationalMapper();
				orm.TablePerClass<Persona>();
				orm.TablePerClass<Evento>();
				orm.TablePerClass<Track>();
				orm.TablePerClass<TrackLog>();
				orm.TablePerClass<Cuenta>();

				orm.Cascade<Evento, Persona>(Cascade.None);
				orm.Cascade<Persona, Evento>(Cascade.None);
				
				orm.Cascade<Persona, Cuenta>(Cascade.All | Cascade.DeleteOrphans);

				var mapper = new Mapper(orm);

				var mapping = mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes());
				
				_cfg = new Configuration();
				_cfg.Configure();
				_cfg.AddDeserializedMapping(mapping, null);
			}
			return _cfg;
		}

		public static ISessionFactory GetSessionFactory()
		{
			if (_sessionfactory == null)
			{
				var cfg = GetConfiguration();

#if DEBUG
				var schemaValidator = new SchemaValidator(cfg);
				try
				{
					schemaValidator.Validate();
				}
				catch
				{
					try
					{
						var schemaUpdate = new SchemaUpdate(cfg);
						schemaUpdate.Execute(false, true);

						schemaValidator.Validate();
					}
					catch
					{
						var schemaExport = new SchemaExport(cfg);
						schemaExport.Create(false, true);
					}
				}

#endif

				_sessionfactory = cfg.BuildSessionFactory();
			}
			return _sessionfactory;
		}
	}
}