using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using FluentNHibernate.Cfg;
using NHibernate.Cfg;
using Migration.Target.Dao.UnitOfWork.Mappings;
namespace Migration.Target.Dao.UnitOfWork
{
public class NHibernateContextSql : IDisposable
{
private string _configFileName;
public string ConfigFileName { get { return this._configFileName; } }
private ISession _session;
public ISession Session { get { return this._session; } }
public NHibernateContextSql(string configFileName)
{
this._configFileName = configFileName;
this._session = NHibernateManagerSql.Instance.GetNewSession(this.GetType(), this._configFileName, this.OnModelCreating);
}
protected void OnModelCreating(FluentMappingsContainer modelBuilder)
{
modelBuilder
.Add(typeof(EmpleadoMap))
.Add(typeof(TrabajoMap))
;
}
public ITransaction BeginTransaction()
{
return this.Session.BeginTransaction();
}
public void Dispose()
{
if (this.Session.IsOpen)
this.Session.Close();
this.Session.Dispose();
}
#region Métodos estáticos exclusivos para crear y/o resolver instancias
private static Func<NHibernateContextSql> _resolveInstance;
public static void Configure(Func<NHibernateContextSql> resolveInstance)
{
_resolveInstance = resolveInstance;
}
public static NHibernateContextSql ResolveInstance()
{
if (_resolveInstance != null)
return _resolveInstance.Invoke();
return null;
}
#endregion
#region Métodos estáticos exclusivos para instalar y/o configurar la base de datos
public static void RunDbSetup(bool restore)
{
NHibernateContextSql dbContext = NHibernateContextSql.ResolveInstance();
using (ITransaction trx = dbContext.BeginTransaction())
{
Configuration configuration = NHibernateManagerSql.Instance.GetConfiguration(dbContext.GetType(), dbContext.ConfigFileName);
//if (restore)
//{
// //Regenera el esquema, borra datos
// NHibernate.Tool.hbm2ddl.SchemaExport schemaExport
// = new NHibernate.Tool.hbm2ddl.SchemaExport(configuration);
// //schemaExport.Drop(true, true);
// //schemaExport.Create(true, true);
// using (FileStream fs = new FileStream(@"c:\Temp\MonitorDB.script", FileMode.Create, FileAccess.Write))
// using (StreamWriter sw = new StreamWriter(fs))
// {
// schemaExport.Create(sw, false);
// }
//}
//else
//{
// //Comprueba esquema
// NHibernate.Tool.hbm2ddl.SchemaValidator schemaValidator
// = new NHibernate.Tool.hbm2ddl.SchemaValidator(configuration);
// schemaValidator.Validate();
//}
//Sincroniza enumeradores
if (restore)
{
//Crea datos desde cero
CreateInitialData();
}
//Salva todos los cambios
trx.Commit();
}
}
private static void CreateInitialData()
{
}
#endregion
}
}
No hay comentarios:
Publicar un comentario