Hibernate.org has a great article on creating a generic DAO for Hibernate in Java. Below is what I use for the C# port.
The interface for common CRUD functionality...
public interface GenericDAO {
T GetById(IdDataType id, bool shouldLock);
List GetAll();
List GetByExample(T exampleInstance, string[] propertiesToExclude);
T SaveOrUpdate(T entity);
void Delete(T entity);
}
The generic DAO implementation...
public abstract class GenericNHibernateDAO : GenericDAO
{
///
Could be set using contruction injection IoC
public GenericNHibernateDAO(ISessionManager sessionManager) {
this.sessionManager = sessionManager;
}
public T GetById(IdDataType id, bool shouldLock) {
ISession session = GetSession();
T entity;
if (shouldLock) {
entity = (T) session.Load(persitentType, id, LockMode.Upgrade);
}
else {
entity = (T) session.Load(persitentType, id);
}
return entity;
}
public List GetAll() {
return GetByCriteria();
}
protected List GetByCriteria(params ICriterion[] criterion) {
ISession session = GetSession();
ICriteria criteria = session.CreateCriteria(persitentType);
foreach (ICriterion criterium in criterion) {
criteria.Add(criterium);
}
GenericUtils genericUtils = new GenericUtils();
return genericUtils.ConvertToGenericList(criteria.List());
}
public List GetByExample(T exampleInstance, string[] propertiesToExclude) {
ISession session = GetSession();
ICriteria criteria = session.CreateCriteria(persitentType);
Example example = Example.Create(exampleInstance);
foreach (string propertyToExclude in propertiesToExclude) {
example.ExcludeProperty(propertyToExclude);
}
criteria.Add(example);
GenericUtils genericUtils = new GenericUtils();
return genericUtils.ConvertToGenericList(criteria.List());
}
public T SaveOrUpdate(T entity) {
ISession session = GetSession();
session.SaveOrUpdate(entity);
return entity;
}
public void Delete(T entity) {
ISession session = GetSession();
session.Delete(entity);
}
private ISession GetSession() {
Check.Require(sessionManager != null, "sessionManager was not set");
return sessionManager.OpenSession();
}
private Type persitentType = typeof(T);
private ISessionManager sessionManager;
}
And for using this within your code...
public class ProjectDAONHibernate : GenericNHibernateDAO<Project, int> {
public ProjectDAONHibernate(ISessionManager sessionManager) : base(sessionManager) {}
}
相关推荐
Wrox.Working.with.NHibernate.3.0.2011 一本关于介绍NHibernate 3.0的书,内容很详细。 原版书,自己学习就好,不要用于商业用途。
ASP.NET with NHibernate 是一个深度探讨如何在ASP.NET MVC框架中使用NHibernate作为持久层解决方案的教程。ASP.NET MVC是一个灵活、模式驱动的框架,用于构建可维护、高性能的Web应用程序。而NHibernate则是一个...
Spring Nhibernate with Oracle Managed Driver
nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#
NHibernate 是一个强大的持久化框架,专为 .NET 开发设计,它简化了数据库与对象之间的交互,使得开发者可以更加关注业务逻辑而不是底层的数据访问细节。这个“NHibernate-2.1.2.GA-bin”压缩包包含了 NHibernate 的...
Nhibernate是一款流行的.NET ORM(对象关系映射)框架,它允许开发人员使用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。映射文件是Nhibernate工作的重要组成部分,它们定义了数据库表与.NET类之间的...
Fluent nHibernate,简化nHibernate工作量的好工具。 nHibernate相信用C#跟数据库打交道的多少知道一些,用过nHibernate的对其中nHibernate的XML配置文件的繁杂应该深有印象。Fluent nHibernate就是为简化nHibernate...
控制器可以从Spring容器中依赖注入BLL,从而间接访问DAO和NHibernate的数据操作功能。 6. **配置MVC与Spring.NET的集成** 为了使MVC能够识别由Spring.NET管理的对象,我们需要配置MVC的依赖解析器。这通常通过使用...
### NHibernate:逐步详解 #### 一、O/R Mapping 概念及NHibernate简介 **O/R Mapping**,即对象关系映射(Object/Relational Mapping),是一种编程技术,用于将对象模型与关系型数据库之间建立映射关系。简单来说...
NHibernate 是一款强大的对象关系映射(ORM)框架,专为.NET环境设计。ORM框架的主要目的是简化数据库操作,将复杂的SQL语句与业务逻辑代码解耦,使得开发人员可以使用面向对象的方式处理数据库操作。NHibernate是...
【NHibernate_Demo】是一个基于C#编程语言的开源库示例项目,它演示了如何在.NET环境中有效地利用NHibernate库来实现对象关系映射(ORM)。NHibernate是.NET平台上一个强大的ORM框架,旨在简化数据库操作,使得开发...
主要是泛型DAO的配置和应用。同时多数据库连接(权限数据库专门是一个库,业务数据至少一个库,利于权限功能分离和重用)。 版本信息:spring.net 1.2 ,NHibernate 2.0 .net 3.5 全部源码和一个较小的测试示例
### NHibernate 3.0: 关键知识点解析 #### 一、NHibernate 概述 NHibernate 是一个开源的对象关系映射(Object Relational Mapping,ORM)框架,它为.NET 开发者提供了一种用于持久化数据的强大工具。NHibernate ...
NHibernate 是一个强大的对象关系映射(ORM)框架,它允许开发者在.NET环境中使用SQL数据库,如Oracle和MySQL,而不必直接编写SQL语句。这个"NHibernate+Oracle NHibernate+MySql Demo"是一个示例项目,展示了如何...
**Nhibernate** 是一个流行的开源对象关系映射(ORM)框架,它为.NET开发者提供了在各种数据库系统上操作数据的强大工具。ORM框架的主要目标是简化数据库操作,通过将数据库表与C#等编程语言中的类进行映射,允许...
NHibernate 是一个流行的开源对象关系映射(ORM)框架,主要应用于.NET环境,尤其是与ASP.NET结合使用。它简化了数据库交互的过程,允许开发者用面向对象的方式处理数据,而无需直接编写SQL语句。在NHibernate2.0...
Optionally, you can describe your mapping metadata with attributes in your source code. NHibernate supports transparent persistence, your object classes don't have to follow a restrictive ...
NHibernate是一款强大的对象关系映射(ORM)框架,它在.NET环境中广泛应用于数据库访问层,极大地简化了数据操作。此框架允许开发人员使用面向对象的方式来处理数据库操作,从而避免了手动编写大量的SQL语句,提高了...
让NHibernate支持Access数据库的驱动程序,源自Hibernate官方,但官方早不支持了(已从NHibernate主类库剔除),这个是基于NHibernate 3.1.0.4000的,需要NHibernate其他版本的话,请打开解决方案引入不同版本的...