您的位置:首页 > 其它

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

2010-04-07 15:32 162 查看
代码

一.数据访问接口
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
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐