`
nlslzf
  • 浏览: 1046499 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Generic DAO with NHibernate

阅读更多

http://geekswithblogs.net/Billy/archive/2006/02/15/69607.aspx

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) {}

}

 

分享到:
评论

相关推荐

    Working with NHibernate 3.0

    Wrox.Working.with.NHibernate.3.0.2011 一本关于介绍NHibernate 3.0的书,内容很详细。 原版书,自己学习就好,不要用于商业用途。

    ASP.NET with Nhibernate

    ASP.NET with NHibernate 是一个深度探讨如何在ASP.NET MVC框架中使用NHibernate作为持久层解决方案的教程。ASP.NET MVC是一个灵活、模式驱动的框架,用于构建可维护、高性能的Web应用程序。而NHibernate则是一个...

    Spring Nhibernate with Oracle Managed Driver

    Spring Nhibernate with Oracle Managed Driver

    nhibernate

    nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#

    NHibernate-2.1.2.GA-bin NHibernate框架

    NHibernate 是一个强大的持久化框架,专为 .NET 开发设计,它简化了数据库与对象之间的交互,使得开发者可以更加关注业务逻辑而不是底层的数据访问细节。这个“NHibernate-2.1.2.GA-bin”压缩包包含了 NHibernate 的...

    Nhibernate 映射文件生成工具

    Nhibernate是一款流行的.NET ORM(对象关系映射)框架,它允许开发人员使用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。映射文件是Nhibernate工作的重要组成部分,它们定义了数据库表与.NET类之间的...

    Fluent nHibernate

    Fluent nHibernate,简化nHibernate工作量的好工具。 nHibernate相信用C#跟数据库打交道的多少知道一些,用过nHibernate的对其中nHibernate的XML配置文件的繁杂应该深有印象。Fluent nHibernate就是为简化nHibernate...

    MVC+NHibernate+Spring.net整合

    控制器可以从Spring容器中依赖注入BLL,从而间接访问DAO和NHibernate的数据操作功能。 6. **配置MVC与Spring.NET的集成** 为了使MVC能够识别由Spring.NET管理的对象,我们需要配置MVC的依赖解析器。这通常通过使用...

    Nhibernate_一步一步

    ### NHibernate:逐步详解 #### 一、O/R Mapping 概念及NHibernate简介 **O/R Mapping**,即对象关系映射(Object/Relational Mapping),是一种编程技术,用于将对象模型与关系型数据库之间建立映射关系。简单来说...

    NHibernate

    NHibernate 是一款强大的对象关系映射(ORM)框架,专为.NET环境设计。ORM框架的主要目的是简化数据库操作,将复杂的SQL语句与业务逻辑代码解耦,使得开发人员可以使用面向对象的方式处理数据库操作。NHibernate是...

    NHibernate_Demo

    【NHibernate_Demo】是一个基于C#编程语言的开源库示例项目,它演示了如何在.NET环境中有效地利用NHibernate库来实现对象关系映射(ORM)。NHibernate是.NET平台上一个强大的ORM框架,旨在简化数据库操作,使得开发...

    Spring.net+NHibernate示例源码

    主要是泛型DAO的配置和应用。同时多数据库连接(权限数据库专门是一个库,业务数据至少一个库,利于权限功能分离和重用)。 版本信息:spring.net 1.2 ,NHibernate 2.0 .net 3.5 全部源码和一个较小的测试示例

    Wrox.Working.with.NHibernate.3.0.2011

    ### NHibernate 3.0: 关键知识点解析 #### 一、NHibernate 概述 NHibernate 是一个开源的对象关系映射(Object Relational Mapping,ORM)框架,它为.NET 开发者提供了一种用于持久化数据的强大工具。NHibernate ...

    NHibernate+Oracle NHibernate+MySql Demo

    NHibernate 是一个强大的对象关系映射(ORM)框架,它允许开发者在.NET环境中使用SQL数据库,如Oracle和MySQL,而不必直接编写SQL语句。这个"NHibernate+Oracle NHibernate+MySql Demo"是一个示例项目,展示了如何...

    Nhibernate

    **Nhibernate** 是一个流行的开源对象关系映射(ORM)框架,它为.NET开发者提供了在各种数据库系统上操作数据的强大工具。ORM框架的主要目标是简化数据库操作,通过将数据库表与C#等编程语言中的类进行映射,允许...

    NHibernate2.0中文文档

    NHibernate 是一个流行的开源对象关系映射(ORM)框架,主要应用于.NET环境,尤其是与ASP.NET结合使用。它简化了数据库交互的过程,允许开发者用面向对象的方式处理数据,而无需直接编写SQL语句。在NHibernate2.0...

    [ORM] NHibernate 3.3.3

    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框架

    NHibernate是一款强大的对象关系映射(ORM)框架,它在.NET环境中广泛应用于数据库访问层,极大地简化了数据操作。此框架允许开发人员使用面向对象的方式来处理数据库操作,从而避免了手动编写大量的SQL语句,提高了...

    NHibernate.JetDriver(基于NHibernate 3.1)

    让NHibernate支持Access数据库的驱动程序,源自Hibernate官方,但官方早不支持了(已从NHibernate主类库剔除),这个是基于NHibernate 3.1.0.4000的,需要NHibernate其他版本的话,请打开解决方案引入不同版本的...

Global site tag (gtag.js) - Google Analytics