• NHibernate开源框架Cuyahoga学习之数据访问接口的实现


    代码
    一.数据访问接口
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using NHibernate.Criterion;
    namespace Cuyahoga.Core.DataAccess
    {
        
    public interface ICommonDao
        {
            
            
    object GetObjectById(Type type, int id);
            
    object GetObjectById(Type type, int id, bool allowNull);
            T GetObjectById
    <T>(int id);
    object GetObjectByDescription(Type type, string propertyName, string description);
            IList GetAll(Type type);
            IList
    <T> GetAll<T>();
            IList GetAll(Type type, 
    params string[] sortProperties);
            IList
    <T> GetAll<T>(params string[] sortProperties);
            IList
    <T> GetAllByCriteria<T>(DetachedCriteria criteria);
            IList
    <T> GetByIds<T>(int[] ids);
            
    void SaveOrUpdateObject(object obj);
          
    void UpdateObject(object obj);
          
    void SaveObject(object obj);
            
    void DeleteObject(object obj);
            
    void MarkForDeletion(object obj);
            
    void RemoveCollectionFromCache(string roleName);
            
    void RemoveCollectionFromCache(string roleName, int id);
            
    void RemoveQueryFromCache(string cacheRegion);
            
    void Flush();
        }
    }
    二.数据访问接口实现
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using NHibernate;
    using NHibernate.Criterion;
    using Castle.Facilities.NHibernateIntegration;
    using Castle.Services.Transaction;

    namespace Cuyahoga.Core.DataAccess
    {
        
    /// <summary>
        
    /// Functionality for common simple data access. The class uses NHibernate.
        
    /// </summary>
        [Transactional]
        
    public class CommonDao : ICommonDao
        {
            
    private readonly ISessionManager _sessionManager;

            
    /// <summary>
            
    /// Constructor.
            
    /// </summary>
            
    /// <param name="sessionManager"></param>
            public CommonDao(ISessionManager sessionManager)
            {
                
    this._sessionManager = sessionManager;
            }

            
    #region ICommonDao Members

            
    public object GetObjectById(Type type, int id)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                
    return session.Load(type, id);
            }

            
    public object GetObjectById(Type type, int id, bool allowNull)
            {
                
    if (! allowNull)
                {
                    
    return GetObjectById(type, id);
                }
                
    else
                {
                    ISession session 
    = this._sessionManager.OpenSession();
                    
    return session.Get(type, id);
                }
            }

            
    public T GetObjectById<T>(int id)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                
    return session.Get<T>(id);
            }

            
    public object GetObjectByDescription(Type type, string propertyName, string description)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                ICriteria crit 
    = session.CreateCriteria(type);
                crit.Add(Expression.Eq(propertyName, description));
                
    return crit.UniqueResult();
            }

            
    public IList GetAll(Type type)
            {
                
    return GetAll(type, null);
            }

            
    public IList GetAll(Type type, params string[] sortProperties)
            {
                ISession session 
    = this._sessionManager.OpenSession();

                ICriteria crit 
    = session.CreateCriteria(type);
                
    if (sortProperties != null)
                {
                    
    foreach (string sortProperty in sortProperties)
                    {
                        crit.AddOrder(Order.Asc(sortProperty));
                    }
                }
                
    return crit.List();
            }

            
    /// <summary>
            
    /// Get all objects of T.
            
    /// </summary>
            
    /// <typeparam name="T"></typeparam>
            
    /// <returns></returns>
            public IList<T> GetAll<T>()
            {
                
    return GetAll<T>(null);
            }

            
    /// <summary>
            
    /// Get all objects of T.
            
    /// </summary>
            
    /// <param name="sortProperties"></param>
            
    /// <typeparam name="T"></typeparam>
            
    /// <returns></returns>
            public IList<T> GetAll<T>(params string[] sortProperties)
            {
                ISession session 
    = this._sessionManager.OpenSession();

                ICriteria crit 
    = session.CreateCriteria(typeof(T));
                
    if (sortProperties != null)
                {
                    
    foreach (string sortProperty in sortProperties)
                    {
                        crit.AddOrder(Order.Asc(sortProperty));
                    }
                }
                
    return crit.List<T>();
            }

            
    /// <summary>
            
    /// Get all objects of T that match the given criteria.
            
    /// </summary>
            
    /// <typeparam name="T"></typeparam>
            
    /// <param name="criteria">NHibernate DetachedCriteria instance.</param>
            
    /// <returns></returns>
            
    /// <remarks>
            
    /// Be careful to not use this one from the UI layer beacuse it ties the UI to NHibernate.
            
    /// </remarks>
            public IList<T> GetAllByCriteria<T>(DetachedCriteria criteria)
            {
                
    using (ISession session = this._sessionManager.OpenSession())
                {
                    ICriteria crit 
    = criteria.GetExecutableCriteria(session);
                    
    return crit.List<T>();
                }
            }

            
    /// <summary>
            
    /// Get all objects of T for the given id's.
            
    /// </summary>
            
    /// <typeparam name="T"></typeparam>
            
    /// <param name="ids"></param>
            
    /// <returns></returns>
            public IList<T> GetByIds<T>(int[] ids)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                ICriteria crit 
    = session.CreateCriteria(typeof(T))
                    .Add(Expression.In(
    "Id", ids));
                
    return crit.List<T>();
            }

            [Transaction(TransactionMode.Requires)]
            
    public virtual void SaveOrUpdateObject(object obj)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.SaveOrUpdate(obj);
            }


            [Transaction(TransactionMode.Requires)]
            
    public virtual void SaveObject(object obj)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.Save(obj);
            }

            [Transaction(TransactionMode.Requires)]
            
    public virtual void UpdateObject(object obj)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.Update(obj);
            }

            [Transaction(TransactionMode.Requires)]
            
    public virtual void DeleteObject(object obj)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.Delete(obj);
            }

            
    public void MarkForDeletion(object obj)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.Delete(obj);
            }

            
    public void RemoveCollectionFromCache(string roleName)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.SessionFactory.EvictCollection(roleName);
            }

            
    public void RemoveCollectionFromCache(string roleName, int id)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.SessionFactory.EvictCollection(roleName, id);
            }

            
    public void RemoveQueryFromCache(string cacheRegion)
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.SessionFactory.EvictQueries(cacheRegion);
            }

            
    public void Flush()
            {
                ISession session 
    = this._sessionManager.OpenSession();
                session.Flush();
            }

            
    #endregion
        }
    }

  • 相关阅读:
    PHP下安装memcached
    SQL Case when 的使用方法
    关于安装PHP补装PDO与PDO_MYSQL操作
    nginx 站点80跳443配置
    mysql 热备
    Ajax技术---核心XMLHttpRequest对象
    线性代数中一组基向量的标准正交化原理通熟易懂理解
    关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解
    ucosii操作系统内核源码学习第一篇
    Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706399.html
Copyright © 2020-2023  润新知