NHMainRepository.cs 4.92 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Tool.hbm2ddl;
using FluentNHibernate.Cfg.Db;
using FluentNHibernate.Automapping;
using ControlPanel.Interfaces.Reposytorys;
using ControlPanel.Models;

namespace ControlPanel.NHInplimentRepository
{
    public class NHMainRepository<T> :IMainRepository<T>
    {
        static ISessionFactory _sessionFactory = null;
        public static ISessionFactory CreateSessionFactory()
        {
            Config mdlConfig = new Config();
            sqlserver mdlSqlserver = mdlConfig.ConnSqlServer();
            _sessionFactory = FluentNHibernate.Cfg.Fluently.Configure()
                                                 .Database(MsSqlConfiguration.MsSql2005.ConnectionString(c => c
                                              .Server("SUBD-ECOR")
                                          //   .Server("(local)")
                                                 .Database(mdlSqlserver.db)
                                             .Username(mdlSqlserver.user)
                                          //   .Username("sa")
                                                 .Password(mdlSqlserver.password)))
                                                 .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.Load("ControlPanel")))
                                            //.ExposeConfiguration(BuildSchema)
                                            .BuildSessionFactory();

            return _sessionFactory;
        }

        private static void BuildSchema(Configuration config)
        {
            new SchemaExport(config).Create(true, true);
        }

        public static ISession GetNHBSession()
        {
            if (_sessionFactory == null)
            {
                _sessionFactory = CreateSessionFactory();

            }
            return _sessionFactory.OpenSession();
        }


        public IList<T> GetAll()
        {
            IList<T> list;
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                list = session.CreateCriteria(typeof(T)).List<T>();
                session.Transaction.Commit();
            }

            return list;

        }
        public T GetByID(int id)
        {
            T list;
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                list = session.Get<T>(id);
                session.Transaction.Commit();

            }

            return list;
        }



        public T GetByMaxId()
        {
            T list;

            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                int max_id = (int)session.CreateCriteria(typeof(T)).SetProjection(Projections.Max("id")).UniqueResult();
                list = session.Get<T>(max_id);
                session.Transaction.Commit();

            }

            return list;
        }


        public void Save(T obj)
        {
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                session.Save(obj);
                session.Transaction.Commit();

            }

        }
        public void Delete(T obj)
        {
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                session.Delete(obj);
                session.Transaction.Commit();

            }
        }
        public void SaveUpdate(T obj)
        {
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                session.SaveOrUpdate(obj);
                session.Transaction.Commit();

            }

        }

        public void DeleteByID(string idPropertyName, int objId)
        {
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                var result = session.CreateCriteria(typeof(T))
                                     .Add(Restrictions.Eq(idPropertyName, objId))
                                     .List<T>();
                if (result.Count > 0)
                {
                    session.Delete(result[0]);
                }
                session.Transaction.Commit();
            }

        }

        public IList<T> GetByPropertyName(string idPropertyName, string pvalue)
        {
            IList<T> list;
            using (ISession session = GetNHBSession())
            {
                session.BeginTransaction();
                list = session.CreateCriteria(typeof(T))
                                      .Add(Restrictions.Like(idPropertyName, pvalue))
                                      .List<T>();

                session.Transaction.Commit();
            }
            return list;

        }


    }
}