当前位置: 首页 > news >正文

.NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)

出处: http://www.cnblogs.com/Terrylee/archive/2006/12/02/opensource_framework_and_resource_recommendation_orm.html

在.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文件配置的方式,每一个实体类都会对应一个映射文件,如下面的例子:

<? xmlversion="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
{
privateint_id;
privatestring_name;
privatestring_password;
privatestring_emailAddress;
privateDateTime_lastLogon;
[PrimaryKey(PrimaryKeyType.Identity,
"LogonID")]
publicintId
{
get{return_id;}
set{_id=value;}
}

[Property(
"LogonName")]
publicstringName
{
get{return_name;}
set{_name=value;}
}

[Property(
"Password")]
publicstringPassword
{
get{return_password;}
set{_password=value;}
}

[Property(
"EmailAddress")]
publicstringAddress
{
get{return_emailAddress;}
set{_emailAddress=value;}
}

[Property(
"LastLogon")]
publicDateTimeLastLogon
{
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
{
privateintid;
privatestringfirstName;
privatestringlastName;
privateDateTime?birthDate;
privatedouble?weightInKilograms;
privatedouble?heightInMeters;
publicPerson(){}
publicintId
{
get{returnid;}
set{id=value;}
}

publicstringFirstName
{
get{returnfirstName;}
set{firstName=value;}
}

publicstringLastName
{
get{returnlastName;}
set{lastName=value;}
}

publicDateTime?BirthDate
{
get{returnbirthDate;}
set{birthDate=value;}
}

publicdouble?WeightInKilograms
{
get{returnweightInKilograms;}
set{weightInKilograms=value;}
}

publicdouble?HeightInMeters
{
get{returnheightInMeters;}
set{heightInMeters=value;}
}

}
映射文件如下:


学习资源

官方文档: 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对象
Databasedb=DatabaseFactory.CreateDatabase();
//使用SQL语句创建DbCommand对象
stringsqlCommand="SelectCustomerID,Name,Address,City,Country,PostalCode"+
"FromCustomers";
DbCommanddbCommand
=db.GetSqlStringCommand(sqlCommand);
StringBuilderreaderData
=newStringBuilder();
//调用ExecuteReader方法
using(IDataReaderdataReader=db.ExecuteReader(dbCommand))
{
while(dataReader.Read())
{
//Getthevalueofthe'Name'columnintheDataReader
readerData.Append(dataReader["Name"]);
readerData.Append(Environment.NewLine);
}

}

returnreaderData.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是微软

相关文章:

  • pandas 学习
  • ORM in .NET 3.5
  • jupyter notebook 选择新的 conda 环境
  • python 生成字母图片
  • 新爹手记之起名篇
  • 使用LumaQQ来开发QQ机器人
  • 图信号处理——拉普拉斯矩阵
  • SPS中计算值公式函数简介
  • 台式机核显和独显切换
  • SPS常见公式示例
  • ModuleNotFoundError: No module named 'torch_sparse.unique_cuda'
  • ModuleNotFoundError: No module named 'torch_scatter.cuda'
  • 反击arp病毒攻击
  • 数据降维与可视化——t-SNE
  • 单例模式完全剖析(1)---- 探究简单却又使人迷惑的单例模式
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Angular 2 DI - IoC DI - 1
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • MobX
  • python大佬养成计划----difflib模块
  • React16时代,该用什么姿势写 React ?
  • web标准化(下)
  • 反思总结然后整装待发
  • 观察者模式实现非直接耦合
  • 和 || 运算
  • 后端_MYSQL
  • 解决iview多表头动态更改列元素发生的错误
  • 那些被忽略的 JavaScript 数组方法细节
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 中文输入法与React文本输入框的问题与解决方案
  • 关于Android全面屏虚拟导航栏的适配总结
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​iOS实时查看App运行日志
  • #前后端分离# 头条发布系统
  • (阿里云万网)-域名注册购买实名流程
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (四)JPA - JQPL 实现增删改查
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .py文件应该怎样打开?
  • //解决validator验证插件多个name相同只验证第一的问题
  • @Bean, @Component, @Configuration简析
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [.net]官方水晶报表的使用以演示下载
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [Android]How to use FFmpeg to decode Android f...
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [go] 策略模式
  • [IE9] IE9 Beta崩溃问题解决方案