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

转载 2009年09月04日 09:26:00

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

 

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

1NHibernate

2NBear

3Castle ActiveRecord

4iBATIS.NET

5DAAB

附加介绍:DLinq

 

一.NHibernate

提起NHibernate,相信大家都不陌生,NHibernate来源于非常优秀的基于JavaHibernate关系型持久化工具,它从数据库底层来持久化.Net对象到关系型数据库,NHibernate为我们完成这一切,而不用自己写SQL语句去操作数据库对象,所写的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQLADO.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文件如下:

 

学习资源

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

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

AeroNhibernate学习手记系列: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组件,因此:

1NBear最适合开发各类基于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的个人Bloghttp://www.cnblogs.com/teddyma/

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

 

三.Castle ActiveRecord

ActiveRecordCastle中的一个子项目,现在的版本是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/

TerryLeeCastle开发系列:

http://terrylee.cnblogs.com/archive/2006/04/28/castl_ioc_article.html

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

 

四.iBATIS.NET

iBATIS.NET分为DataMapperDataAccess两部分,应该说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

TerryLeeEnterprise 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/

ScottGuBloghttp://weblogs.asp.net/scottgu/default.aspx

 

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

MyBatis 入门视频教程

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。是一个基于Java的持久层框架。主要学会对数据库的增删改查
  • 2015年10月13日 09:40

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

 .NET开源项目介绍及资源推荐:数据持久层 在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源:1.NHibernate2.NBear3.Castle A...
  • zhuzhao
  • zhuzhao
  • 2008-12-20 22:35:00
  • 508

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

在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源:1.NHibernate2.NBear3.Castle ActiveRecord4.iBATIS.NET...
  • owlynx
  • owlynx
  • 2006-12-05 11:07:00
  • 974

(转).NET开源项目介绍及资源推荐:数据持久层

 .NET开源项目介绍及资源推荐:数据持久层 在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源:1.NHibernate2.NBear3.Castle A...
  • bestshl
  • bestshl
  • 2007-09-04 09:25:00
  • 899

.NET开源项目介绍及资源推荐

最近比较忙,写不出来别的文章,只好给大家来一个.NET开源项目介绍及资源推荐系列。我觉得总结这样的一个系列还是必要的,在.NET平台下,各种各样的开源框架非常多,对于有些朋友来说往往会弄不明白一些框架...
  • aiaoliya0622
  • aiaoliya0622
  • 2007-10-02 16:30:00
  • 604

NET开源项目介绍及资源推荐

1..NET开源项目介绍及资源推荐:IOC容器篇导读:介绍.NET平台下几种开源的IOC容器:Castle,Spring.NET,ObjectBuilder,StructureMap  2..NET开...
  • kingofbirdzjy
  • kingofbirdzjy
  • 2008-03-24 14:12:00
  • 1003

一套用于.net快速开发的持久层优秀框架

  • 2009年02月18日 22:25
  • 2.32MB
  • 下载

[原创].Net下的数据持久层DAL

前几天正好解决了个通用数据持久访问层,特此拿出来奉献下~~~鲜花的鲜花,鸡蛋的鸡蛋~~~嘿嘿!     特点:          1。适合中小企业数据访问架构,其实大架构也没问题的,毕竟数据处理都放在...
  • fjw8205
  • fjw8205
  • 2007-09-11 14:30:00
  • 1311

介绍一些java开源项目

ZBNO 中文自动断词引擎开源项目简介:英文句子里的词汇都有空格分开,中文句子里的词却没有这个特点。如何识别中文词语便成了中文信息检索的关键技术之一。ZBNO在此公布我们的《中文自动断词引擎开源项目》...
  • dongle2001
  • dongle2001
  • 2005-10-16 20:09:00
  • 836

.NET开源项目介绍及资源推荐:IOC容器篇

关于IOC的概念就不多说了,在.NET平台下,比较优秀的IOC容器框架有如下四种,本文试图作一个简单的介绍,以及推荐一些各个框架的学习资源。一.Castle在Castle 中包含了一组开发框架,它里面...
  • luying777
  • luying777
  • 2008-01-21 13:56:00
  • 488
收藏助手
不良信息举报
您举报文章:.NET开源项目介绍及资源推荐:数据持久层
举报原因:
原因补充:

(最多只允许输入30个字)