在.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;
官方主页: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     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/activerecord/documentation/v1rc1/index.html
叶子的家:http://wj.cnblogs.com/
TerryLee的Castle开发系列: http://terrylee.cnblogs.com/archive/2006/04/28/castl_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/confluence/oss/display/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/archive/2006/08/01/Enterprise_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等。

转载于:https://www.cnblogs.com/ysyu/archive/2008/03/29/1129073.html

.NET开源项目介绍及资源推荐:数据持久层相关推荐

  1. 开源项目介绍 | Angel-高性能分布式机器学习平台

    2021腾讯犀牛鸟开源人才培养计划 开源项目介绍 滑至文末报名参与开源人才培养计划 报名提交项目Proposal Angel项目介绍 Angel-高性能分布式机器学习平台,是腾讯研发并开源的面向企业级 ...

  2. 几种P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据. ...

  3. P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据. ...

  4. 【P2P】【转载】P2P流媒体开源项目介绍

    大神的整理 P2P流媒体开源项目介绍 前言: 最近在做一个网站,发现p2p流媒体技术对于解决高流量高带宽问题真的很不错. 据说现在一些视频和直播公司在研究p2p+cdn,证明了p2p永不过时. 先记录 ...

  5. 开源项目-ERP企业资源管理系统

    哈喽,大家好,今天给大家带来一个开源项目-ERP企业资源管理系统 企业资源管理系统的主要功能包括基础数据,人事管理,采购管理,销售管理,库存管理,权限管理等模块 登录 主页 基础数据

  6. 优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信

    优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信 今天开始会陆续介绍一些优秀的开源项目,项目基本都是和FPGA或HDL相关的.对于一些找工作或者急需项目经验的人来说,这些项目都有一定的 ...

  7. 6个P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍  1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据 ...

  8. java pmd_java代码扫描:pmd开源项目介绍

    java代码扫描:pmd开源项目介绍.能够扫描java代码,并发现潜在的问题与bug. PMD scans Java source code and looks for potential probl ...

  9. 开源项目介绍 |APIJSON- 后端零代码接口和文档ORM 库

    2021腾讯犀牛鸟开源人才培养计划 开源项目介绍 滑至文末报名参与开源人才培养计划 提交项目Proposal APIJSON项目介绍 标签:后端, ORM 库 技术栈:java APIJSON- 后端 ...

最新文章

  1. 1105 Spiral Matrix 给定数组向螺旋矩阵中填入数据
  2. Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
  3. diskgeniusv4.4.0_.NET Core 3.0及ASP.NET Core 3.0前瞻
  4. html 页面视图中的资源文件(css/js/image)的路径问题。
  5. Web开发中8个基础常见功能
  6. ORA-06519: active autonomous transaction detected and rolled back
  7. 关于内存的划分和传引用传参数的区别
  8. WebStorm 2017 最新版激活方式
  9. java的连接 初始化_java类从加载、连接到初始化过程详解
  10. 2月26 ubuntu系统备份还原到相同电脑、另一台电脑
  11. [转]SQL SERVER数据库开发之触发器的应用
  12. 动力学是如何做预测的
  13. 当初我要是这么学习计算机网络就好了「附图文解析」
  14. 华为手机 图标消失_华为手机桌面图标不见了怎么办
  15. vbs格式编程教程基础
  16. java date获取24点_获取0点和24点时间戳的方式
  17. 关于手机上的卫星定位
  18. 【Django】Django 的员工信息系统
  19. C++ —— 自定义函数
  20. CPU动态调频二:interactive governor

热门文章

  1. 阿里-优酷视频增强和超分辨率挑战赛冠军方案:VESR-Net
  2. 腾讯优图刷新人体姿态估计国际权威榜单,相关论文被ECCV2020收录
  3. 奖金15万,百度携手CCF打造CV+NLP双赛题
  4. 博士导师总结目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)
  5. 收藏 | PyTorch 单机多卡操作总结
  6. linux ruby作用域,细说Ruby细化
  7. 扫码枪输入mysql_使用jQuery监听扫码枪输入并禁止手动输入的实现方法
  8. SpringMVC 原理及详细使用
  9. html怎么判断字段,javascript怎么判断是否为字符串?
  10. 软考网络管理员学习笔记2之第二章数据通信基础