总结:NHibernate——DAL层处理类AbstractDao<T>

可以把增、删、改、查都写成泛型方法

    /// <summary>

    ///

    /// </summary>

    /// <typeparam name="T"></typeparam>

    public class AbstractDao<T>

    {

        private string m_sessionFactoryConfigPath;

        protected ISession CurrentSession

        {

            get

            {

                return SessionManager.Instance.GetSession(m_sessionFactoryConfigPath);

            }

        }

 

        public AbstractDao(string sessionFactoryConfigPath)

        {

            if (string.IsNullOrEmpty(sessionFactoryConfigPath))

            {

                throw new ArgumentNullException("");

            }

 

            m_sessionFactoryConfigPath = sessionFactoryConfigPath;

        }

 

 

        protected static object s_workLocker = new object();

 

 

        /// <summary>

        /// 获得实体对象

        /// </summary>

        /// <param name="key">关键字</param>

        /// <returns>对应实体</returns>

        public T GetEntity(Object key)

        {

            if (!CurrentSession.IsConnected)

            {

                CurrentSession.Reconnect();

            }

            T entity = default(T);

 

            lock (s_workLocker)

            {

                try

                {

                    using (ISession session = CurrentSession)

                    {

                        using (session.BeginTransaction())

                        {

                            entity = session.Load<T>(key);

                        }

                    }

                }

                catch (Exception ex)

                {

                    throw new PersistenceException("", ex);

                }

            }

            return entity;

        }

 

        /// <summary>

        /// 获得IList<string>类型的返回值

        /// </summary>

        /// <param name="hql"></param>

        /// <returns></returns>

        public IList<string> GetIListString(string hql)

        {

            IList<string> lists = null;

 

            lock (s_workLocker)

            {

                using (ISession session = CurrentSession)

                {

                    using (ITransaction transaction = session.BeginTransaction())

                    {

                        try

                        {

                            lists = session.CreateQuery(hql).List<string>();

                            transaction.Commit();

                        }

                        catch (Exception ex)

                        {

                            transaction.Rollback();

                            throw new PersistenceException("", ex);

                        }

                    }

                }

            }

            return lists;

        }

}

原文地址:https://www.cnblogs.com/LeimOO/p/1634788.html