在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源:

1.NHibernate

2.NBear

3.Castle ActiveRecord

4.iBATIS.NET

5.DAAB

附加介绍:DLinq

一.NHibernate

提起NHibernate,相信大家都不陌生,NHibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具,它从数据库底层来持久化.Net对象到关系型数据库,NHibernate为我们完成这一切,而不用自己写SQL语句去操作数据库对象,所写的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQL和ADO.NET处理数据的时间. NHibernate可以帮助消除或者包装那些针对特定数据库的SQL代码,并且把结果集从表格的表示形式转换到一系列的对象去。NHibernate采用XML文件配置的方式,每一个实体类都会对应一个映射文件,如下面的例子:

public class User
{
    public User()

{

}

private string id;

private string userName;

private string password;

private string emailAddress;

private DateTime lastLogon;

public string Id

{
        get { return id; }

set { id = value; }
    }

public string UserName

{
        get { return userName; }

set { userName = value; }
    }

public string Password

{
        get { return password; }

set { password = value; }
    }

public string EmailAddress

{
        get { return emailAddress; }

set { emailAddress = value; }
    }

public DateTime LastLogon

{
        get { return lastLogon; }

set { lastLogon = value; }
    }
}
它对应的.hbm.xml文件如下:
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">

<class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users">

<id name="Id" column="LogonId" type="String" length="20">

<generator class="assigned" />

</id>

<property name="UserName" column= "Name" type="String" length="40"/>

<property name="Password" type="String" length="20"/>

<property name="EmailAddress" type="String" length="40"/>

<property name="LastLogon" type="DateTime"/>

</class>

</hibernate-mapping>

官方主页:http://www.nhibernate.org/

学习资源

园子里首推DDL的Blog:http://www.cnblogs.com/renrenqq/,有NHibernate文档的中文翻译以及DLL写的一些非常优秀的NHibernate文章。

大名鼎鼎的张老三:http://blog.csdn.net/billy_zh/category/22383.aspx

Aero的Nhibernate学习手记系列:http://www.cnblogs.com/chwkai/category/32514.html

无心之柳的Blog也非常值得推荐:http://www.cnblogs.com/9527/

博客园O/R Mapping团队:http://www.cnblogs.com/team/ORMapping.html

二.NBear

园子里Teddy开发的NBear大家都非常熟悉,现在已经发布了3.0正式版。NBear包含的组件不仅仅是数据持久层,还包含了IOC,分布式组件和Web组件。看一下Teddy对于NBear的介绍:

NBear的核心包括一个泛型、强类型的的ORM数据持久化接口、一组相关的Entity相关组件、高性能分布式组件、Web组件,因此:

1、NBear最适合开发各类基于ASP.NET 2.0,对性能要求较高的Web程序。NBear.Web组件提供了许多加速Web开发的组件,将使您基于标准 ASP.NET方式的开发效率大大提高;同时,简单易用、性能突出的泛型持久化支持,则将使您能够将更多注意力集中到业务开发,同时也不会有传统ORM持久化框架的性能问题和繁琐配置需要(NBear几乎不需手动配置,性能则接近DAAB)。

2、基于MQ和.Net Remoting的高性能分布式组件,将使您开发和维护分布式程序更加容易。一个基于NBear.IoC模块的开发的应用程序甚至无需重新编译就能部属为真正的负载均衡的分布式程序。

3、对于桌面应用程序,NBear同样是一个几乎没有什么学习曲线(多少人会为写一个小小的日历程序而仔细研究透彻Hibernate的参考手册?)、实用高效的数据持久化方案。

4、随着NBearV3带来的全面的ORM支持、更详细的文档和教程,和全面的代码生成工具,NBear也已经可以被用于企业级程序开发。

官方首页:http://teddyma.cnblogs.com/articles/Ilungasoft_Framework.html

学习资源

学习资源当然首推Teddy的个人Blog:http://www.cnblogs.com/teddyma/

博客园NB团队:http://nbteam.cnblogs.com/

三.Castle ActiveRecord

ActiveRecord是Castle中的一个子项目,现在的版本是RC1。它同样是一个非常优秀的持久层框架,在底层封装了NHibernate,改用Attribute来代替配置文件,这样就不用再像NHibernate那样去编写复杂的配置文件。如下代码片断所示:

[ActiveRecord("Users")]
public class User : ActiveRecordBase

{
    private int _id;

private string _name;

private string _password;

private string _emailAddress;

private DateTime _lastLogon;

[PrimaryKey(PrimaryKeyType.Identity, "LogonID")]

public int Id

{
        get { return _id; }

set { _id = value; }
    }

[Property("LogonName")]

public string Name

{
        get { return _name; }

set { _name = value; }
    }

[Property("Password")]

public string Password

{
        get { return _password; }

set { _password = value; }
    }

[Property("EmailAddress")]

public string Address

{
        get { return _emailAddress; }

set { _emailAddress = value; }
    }

[Property("LastLogon")]

public DateTime LastLogon

{
        get { return _lastLogon; }

set { _lastLogon = value; }
    }

}

官方主页:http://www.castleproject.org

学习资源

官方文档:http://www.castleproject.org/activerec ...tation/v1rc1/index.html

叶子的家:http://wj.cnblogs.com/

TerryLee的Castle开发系列:

http://terrylee.cnblogs.com/archiv ... astl_ioc_article.html

Castle项目成员之一ayende的Blog:http://www.ayende.com/Blog/

四.iBATIS.NET

iBATIS.NET分为DataMapper和DataAccess两部分,应该说DataMapper是这个框架的核心,DataMapper使用XML文件来实现从实体到SQL statements的映射,学习起来非常简单,是用DataMapper后,我们可以自由的使用SQL语句或者存储过程;DataAccess允许我们通过一个简单的接口来操作数据,而不必了解底层实现的细节。如下代码片断:
[Serializable]

public class Person

{
    private int id;

private string firstName;

private string lastName;

private DateTime? birthDate;

private double? weightInKilograms;

private double? heightInMeters;

public Person() { }

public int Id

{
        get { return id; }

set { id = value; }
    }

public string FirstName

{
        get { return firstName; }

set { firstName = value; }
    }

public string LastName

{
        get { return lastName; }

set { lastName = value; }
    }

public DateTime? BirthDate

{
        get { return birthDate; }

set { birthDate = value; }
    }

public double? WeightInKilograms

{
        get { return weightInKilograms; }

set { weightInKilograms = value; }
    }

public double? HeightInMeters

{
        get { return heightInMeters; }

set { heightInMeters = value; }
    }
}

映射文件如下:

<?xml version="1.0" encoding="utf-8" ?>

<sqlMap namespace="Person" xmlns="http://ibatis.apache.org/mapping"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >

<alias>

<typeAlias alias="Person" type="IBatisNetDemo.Domain.Person,IBatisNetDemo" />

</alias>

<resultMaps>

<resultMap id="SelectAllResult" class="Person">

<result property="Id" column="PER_ID" />

<result property="FirstName" column="PER_FIRST_NAME" />

<result property="LastName" column="PER_LAST_NAME" />

<result property="BirthDate" column="PER_BIRTH_DATE" />

<result property="WeightInKilograms" column="PER_WEIGHT_KG" />

<result property="HeightInMeters" column="PER_HEIGHT_M" />

</resultMap>

</resultMaps>

<statements>

<select id="SelectAllPerson" resultMap="SelectAllResult">

select

PER_ID,

PER_FIRST_NAME,

PER_LAST_NAME,

PER_BIRTH_DATE,

PER_WEIGHT_KG,

PER_HEIGHT_M

from PERSON

</select>

<select id="SelectByPersonId" resultClass="Person" parameterClass="int">

select

PER_ID,

PER_FIRST_NAME,

PER_LAST_NAME,

PER_BIRTH_DATE,

PER_WEIGHT_KG,

PER_HEIGHT_M

from PERSON

where PER_ID = #value#

</select>

<insert id="InsertPerson"  parameterclass="Person" >

<selectKey property="Id" type="post" resultClass="int">

${selectKey}

</selectKey>

insert into Person

( PER_FIRST_NAME,

PER_LAST_NAME,

PER_BIRTH_DATE,

PER_WEIGHT_KG,

PER_HEIGHT_M)

values

(#FirstName#,#LastName#,#BirthDate#, #WeightInKilograms#, #HeightInMeters#)

</insert>

<update id="UpdatePerson" parameterclass="Person">

<![CDATA[ update Person set

PER_FIRST_NAME =#FirstName#,

PER_LAST_NAME =#LastName#,

PER_BIRTH_DATE =#BirthDate#,

PER_WEIGHT_KG=#WeightInKilograms#,

PER_HEIGHT_M=#HeightInMeters#

where

PER_ID = #Id#]]>

</update>

<delete id="DeletePerson" parameterclass="Person">

delete from Person

where

PER_ID = #Id#

</delete>

</statements>

</sqlMap>
官方主页:http://ibatis.apache.org/

学习资源

官方文档:

http://opensource.atlassian.com/confluen ...IBATIS/Quick+Start+Guide

善友的iBATIS.NET开发指南系列:

http://www.cnblogs.com/shanyou/archive/2006/04/29/388610.html

五.DAAB

DAAB是微软Enterprise Library中的一个应用程序块,能够帮助我们实现通用的数据访问,所以也把它列在这里介绍一下。DAAB使应用程序中的数据访问在不知道具体的数据库系统的情况下进行,相信很多朋友对DAAB都很熟性并且已经在项目中使用,就不多介绍了,看一个简单的代码片断:
public string GetCustomerList()

{
// 创建Database对象

Database db = DatabaseFactory.CreateDatabase();

// 使用SQL语句创建DbCommand对象

string sqlCommand = "Select CustomerID, Name, Address, City, Country, PostalCode " +

"From Customers";

DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);

StringBuilder readerData = new StringBuilder();

// 调用ExecuteReader方法

using (IDataReader dataReader = db.ExecuteReader(dbCommand))

{

while (dataReader.Read())

{

// Get the value of the 'Name' column in the DataReader

readerData.Append(dataReader["Name"]);

readerData.Append(Environment.NewLine);

}

}

return readerData.ToString();

}

官方主页:http://msdn.microsoft.com/practices/

学习资源

企业的帮助文档和Hands On Lab

TerryLee的Enterprise Library系列:http://www.cnblogs.com/Terrylee/archi ... nterprise_Library.html

附加介绍:DLinq

DLinq虽然不能算是开源框架,但是说到数据持久,还是提一下比较好,DLinq是微软下一代数据库集成查询语言,在这之前微软曾经尝试过ObjectSpace,最后是不了了之。DLinq实现的方式有点类似于前面说过的ActiveRecord,不支持使用外部的XML配置文件,而是使用了Attribute的方式,如下代码片断所示:
[Table(Name="Customers")]

public class Customer

{

[Column(Id=true)]

public string CustomerID;

[Column]

public string City;

}

官方主页:http://msdn.microsoft.com/netframework/future/linq/

学习资源

下载LINQ May CTP版:http://msdn.microsoft.com/data/ref/linq/

ScottGu的Blog:http://weblogs.asp.net/scottgu/default.aspx

最后值得一提的是,微软又推出个Ado.net vNext,使用映射文件来配置,更加类似于NHibernate。关于持久层框架,还有很多,这里就不再介绍了,如Grove等。

原文地址: http://www.cnblogs.com/Terrylee/archive/2006/12/02/ope ...resource_recommendation_orm.html

.NET平台下,关于数据持久层框架的更多相关文章

  1. .NET平台数据持久层框架

    在.NET平台下的几个数据持久层框架: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS.NET 5.DAAB 6.DLinq

  2. Java数据持久层框架 MyBatis之背景知识三

    摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...

  3. Java数据持久层框架 MyBatis之背景知识一

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  4. Hibernate: 数据持久层框架

    Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hi ...

  5. Java数据持久层框架 MyBatis之API学习一(简介)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  6. Java数据持久层框架 MyBatis之背景知识二

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  7. 数据持久层框架iBatis, Hibernate 与 JPA 比较

    在本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persistence API(JPA).我们介绍每种解决方案并讨论其所规定的品质,以及在广泛 ...

  8. mybatis:数据持久层框架

    mybatis是一个持久层的框架,是Apache下的顶级项目. mybatis托管到goolecode下,再后来托管到GitHub下:https://github.com/mybatis/mybati ...

  9. Java数据持久层框架 MyBatis之API学习四(xml配置文件详解)

    摘录网址: http://blog.csdn.net/u010107350/article/details/51292500 对于MyBatis的学习而言,最好去MyBatis的官方文档:http:/ ...

随机推荐

  1. CE_现金银行总行分行设定详解(案例)

    2014-07-14 Created By BaoXinjian

  2. group by 获取总记录数

    sql中有group buy 后如何获取总记录的条数,来生成分页 当然一般情况下我是不推荐这样的分页,如果你真的需要应该是你表结构设计有问题 1.适用于所有情况 $db = new PDO(DSN.. ...

  3. invalid byte 1 of 1-byte UTF-8 sequence

    这是一个很普通的问题 , 就是UTF-8的xml文件被默认为GBK或者其他编码的编辑器改了之后保存为其他编码了 , 解决方案网上有很多. 其实需要注意的就是不要为了图方便 , 随便就找了个编辑器改一下 ...

  4. JAVA 创建类,使用类

    一.创建类: Test.java //定义类 public class Test{ //属性 String name; String gender; int age; //方法,无参无返回 publi ...

  5. Redis 发布/订阅机制原理分析

    Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能.   这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播.实时 ...

  6. $.extend()和$.fn.extend()用法和区别

    $.extend()和$.fn.extend()用法和区别: 在自己制作插件的时候会经常用到$.extend()和$.fn.extend()两个函数,无论从外观还是作用都非常的类似,但是实际上它们的区 ...

  7. SQL锁表解决并发性

    在数据库开发过程中,不得不考虑并发性的问题,因为很有可能当别人正在更新表中记录时,你又从该表中读数据,那你读出来的数据有可能就不是你希望得到的数据.可以说有些数据同时只能有一个事物去更新,否则最终显示 ...

  8. jquery on off 方法

    $("p").on("click",function(){alert("The paragraph was clicked.");}); $ ...

  9. bat文件创建mysql数据库 数据库名为meter

    -- 详见附件,已自测通过      //修改为mysql安装路径     C:\Program Files\MySQL\MySQL Server 5.5"      createtestd ...

  10. zabbix 修改输出web前端图片的日期格式

    zabbix并没有给定一个全局或者用户级别的时间格式定义方式. 实在看不惯的话,可以自己修改源代码来实现修改. 暂时研究了半小时,先把展示图片修改了. 后续有更严谨的方案,再更新此文吧. ------ ...