jueves, 17 de septiembre de 2015

NHibernateContextSql.cs

using System;
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