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

.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文件如下:
<?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/

学习资源

园子里首推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等。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-12-02 00:42 TerryLee 阅读(20395) 评论(84)  编辑 收藏 网摘 所属分类: [12]  开源世界

  回复  引用  查看    
#1楼2006-12-02 00:57 | overred      
总结不错哦。。。
晚安

  回复  引用  查看    
#2楼2006-12-02 01:02 | Tseng      
被抢了沙发,5555
我一直在等待NH1.2的正式版本出来.

  回复  引用    
#3楼2006-12-02 01:11 | Tseng[匿名]
如果在一个项目中应用上面的几个框架,哪几个结合比较好?NHibernate+iBATIS.NET?或者是单一使用?
  回复  引用  查看    
#4楼2006-12-02 02:00 | neuhawk      
基于linq的orm肯定不错的,因为linq很强大.
  回复  引用    
#5楼2006-12-02 08:40 | exhjw[未注册用户]
还有 Gentle.Net
  回复  引用    
#6楼2006-12-02 08:58 | .progame[未注册用户]
现在发布的dlinq除了不支持多数据库外,简直帅到掉渣
  回复  引用  查看    
#7楼2006-12-02 09:41 | 音乐虫子      
这么多框架,真的有点无所适从!
  回复  引用    
#8楼2006-12-02 10:45 | 剑在上海^^[未注册用户]
把NH坚持到底.................- - |||
  回复  引用  查看    
#9楼[楼主]2006-12-02 10:45 | TerryLee      
@overred
谢谢,现在刚起来

  回复  引用  查看    
#10楼2006-12-02 10:46 | Dflying Chen      
这种文章绝对是精华!不过有个疑惑,为什么你的文章中的代码两行之间都要空一行呢?这样文章太长了,看起来不方便啊
  回复  引用  查看    
#11楼[楼主]2006-12-02 10:46 | TerryLee      
@Tseng
NH还是比较灵活的,就是编写映射文件有点复杂:)

  回复  引用  查看    
#12楼[楼主]2006-12-02 10:47 | TerryLee      
@Tseng[匿名]
我现在一般选用的是Castle中的AR

  回复  引用  查看    
#13楼2006-12-02 10:47 | Dflying Chen      
我是用Firefox 1.5的
  回复  引用  查看    
#14楼[楼主]2006-12-02 10:49 | TerryLee      
@neuhawk
不过DLinq也有一点问题的,有人曾经总结过几点意见,总体来说还是比较优秀的:)

  回复  引用  查看    
#15楼[楼主]2006-12-02 10:50 | TerryLee      
@exhjw
谢谢推荐:)

  回复  引用  查看    
#16楼[楼主]2006-12-02 10:51 | TerryLee      
@.progame
现在还没有在实践中体验过,希望有机会体验一把:)

  回复  引用  查看    
#17楼[楼主]2006-12-02 10:53 | TerryLee      
@音乐虫子
有时候选择使用哪种框架也是个问题-_-

  回复  引用  查看    
#18楼[楼主]2006-12-02 10:54 | TerryLee      
@剑在上海^^
NH的忠实用户,呵呵

  回复  引用  查看    
#19楼[楼主]2006-12-02 10:55 | TerryLee      
@Dflying Chen
谢谢指出,直接从Word中拷贝过来的,然后再插入代码,不知道为什么就出现了这个问题,可能是我在Word中设置了行距了吧,下次注意一下:)

  回复  引用  查看    
#20楼2006-12-02 10:56 | Dflying Chen      
@TerryLee
我觉得是“插入代码”功能的问题。你查看一下页面的CSS吧

  回复  引用  查看    
#21楼[楼主]2006-12-02 10:58 | TerryLee      
@Dflying Chen
可能是我在粘贴到“插入代码”的文本框中的时候,就已经有空行了,我修改一下,呵呵

  回复  引用  查看    
#22楼2006-12-02 11:05 | Dflying Chen      
@TerryLee
希望你的文章样式和文章内容一样专业!

  回复  引用  查看    
#23楼[楼主]2006-12-02 11:07 | TerryLee      
@Dflying Chen
呵呵,调过来,现在看一下还有没有这个问题:)

  回复  引用  查看    
#24楼2006-12-02 11:07 | 木野狐      
收藏了。
  回复  引用  查看    
#25楼2006-12-02 11:23 | Dflying Chen      
@TerryLee
不错不错,现在好了!

  回复  引用  查看    
#26楼[楼主]2006-12-02 11:31 | TerryLee      
@木野狐
:)

  回复  引用  查看    
#27楼[楼主]2006-12-02 11:32 | TerryLee      
@Dflying Chen
下次得注意了,呵呵

  回复  引用  查看    
#28楼2006-12-02 11:42 | Tseng      
@剑在上海^^
对,将NH支持到底,而CASTLE不竟是封装了NH.

  回复  引用  查看    
#29楼[楼主]2006-12-02 11:51 | TerryLee      
@Tseng
小项目中使用AR还是挺方便的,毕竟NH多了映射文件:)

  回复  引用    
#30楼2006-12-02 13:39 | 张豪[匿名][未注册用户]
今天想泼点冷水,希望大哥不要生气: 天天在博客园上泡着,这样的文章其实大哥已经写了几次了 ,都是初级的 对初学者没有太多的实用价值 希望楼主能够多写一些带有整体实例的文章,从前台到后台,很清晰 这样初学这才知道这是怎么使用,要不都是断断续续,很难去把握整体。不好意思希望不要介意
  回复  引用  查看    
#31楼[楼主]2006-12-02 15:42 | TerryLee      
@张豪[匿名]
“这样的文章其实大哥已经写了几次了”

===============================================

呵呵,如果我没有记错的话,这好像是我第一次写这样的文章吧?对于初学者来说,往往不知道该学什么?或者说要实现一些功能有哪些框架可以使用?学习这些框架有什么好的资源?本系列文章的作用在于此!

个人能力和精力有限,不可能对一直有时间去针对这些框架写一些带有整体实例的文章,所以还请见谅,毕竟大家都是利用业余时间在写

  回复  引用  查看    
#32楼2006-12-02 17:28 | Amnoh      
建议楼主,把汉字的斜体去掉,汉字最好加粗或者下划线,斜体会把字弄得看不清
  回复  引用  查看    
#34楼2006-12-02 21:43 | 蛙蛙池塘      
有用,总结的不错,谢谢。
  回复  引用    
#35楼2006-12-03 01:10 | seraph[匿名]
在园子里看了不少介绍这种数据持久层框架的介绍
但是个人有个疑问就是大家在真正的项目中到底用到了哪些呢?
还是只是学习学习?

真正用到这些框架的时候程序员又会觉得很无聊学不到东西,为什么?因为模式已经固定,剩下的就是简单的生成代码,复制
应该让每个程序员都非常清晰的明白整个业务的流程(我碰到过许多程序员和需求分析吵架的场面),否则大家不知道自己写代码能学到什么,相信一个熟知某个业务流程的程序员才是企业真正需要的人才吧
--唉哟,文字表达能力不行,乱说一气,大家别拍我

  回复  引用    
#36楼2006-12-03 01:19 | seraph[匿名]
嗯,再罗嗦一句
这么多介绍数据持久层的文章
希望园子里能多点关于具体使用某个持久层进行开发时碰到的问题,而不是一些简单的业务逻辑演示

  回复  引用    
#37楼2006-12-03 01:19 | seraph[匿名]
嗯,再罗嗦一句
这么多介绍数据持久层的文章
希望园子里能多点关于具体使用某个持久层进行开发时碰到的问题,而不是一些简单的业务逻辑演示

  回复  引用  查看    
#38楼2006-12-03 11:12 | 风云      
:)
  回复  引用  查看    
#39楼[楼主]2006-12-03 14:42 | TerryLee      
@Amnoh
好,我下次注意一下

  回复  引用  查看    
#40楼[楼主]2006-12-03 14:43 | TerryLee      
@overred
ScottGu的文章都很不错,呵呵:)

  回复  引用  查看    
#41楼[楼主]2006-12-03 14:43 | TerryLee      
@蛙蛙池塘
:)

  回复  引用  查看    
#42楼[楼主]2006-12-03 14:54 | TerryLee      
@seraph[匿名]
1.在园子里看了不少介绍这种数据持久层框架的介绍
==========================================

我就奇怪,园子里有这样对开源框架分类进行介绍和总结,并推荐学习资源的文章吗?

2.但是个人有个疑问就是大家在真正的项目中到底用到了哪些呢?
还是只是学习学习?
===========================================

并不是说项目中用了哪些,以上所介绍框架都有人在项目中使用,我个人也在项目中使用过AR,并不只是学习学习!

3.真正用到这些框架的时候程序员又会觉得很无聊学不到东西,为什么?因为模式已经固定,剩下的就是简单的生成代码,复制
============================================
这只是你个人遇到的情况而已,并不代表所有!

4.应该让每个程序员都非常清晰的明白整个业务的流程(我碰到过许多程序员和需求分析吵架的场面),
==============================================
这个问题不是在园子里写一两篇文章就能解决的!

  回复  引用  查看    
#43楼2006-12-03 15:53 | 丁丁      
.NetTier + CodeSmith算不算也是一种数据持久层的方案?那么多方案,到底哪个好呢?请不要回答微软的好,虽然估计大家早晚都会使用微软的方案。
  回复  引用  查看    
#44楼2006-12-03 19:51 | Allen Zhang      
介绍得很好,只是,像我这种以前从没用过这些东西的人来说,不知道要选哪个好。。能不能推荐一下呢,什么样的情况下要用什么?
  回复  引用  查看    
#45楼[楼主]2006-12-03 23:34 | TerryLee      
@丁丁
这个算是一种解决方案吧,这里讨论的是开源数据持久层框架

也不能说是哪个好,哪个坏,各有优劣吧。比如说NH虽然配置繁琐,但是它灵活;AR配置简单,但它不如NH那么灵活。

  回复  引用  查看    
#46楼[楼主]2006-12-03 23:37 | TerryLee      
@Allen Zhang
在框架的选用上,NBear不错,就是版本更新的太快:),我个人在项目中使用AR,感觉不错:)

  回复  引用  查看    
#47楼2006-12-04 08:16 | Tseng      
@TerryLee
同感,每天上来这里,都可以看到新的一个版本出现,真是可怕。

  回复  引用  查看    
#48楼[楼主]2006-12-04 08:24 | TerryLee      
@Tseng
是啊:)

  回复  引用  查看    
#49楼2006-12-04 13:14 | Kevin Wu      
嗯嗯,这个东西好呀,多谢李大哥分享
  回复  引用  查看    
#50楼[楼主]2006-12-04 18:43 | TerryLee      
@Kevin Wu
:)

  回复  引用    
#51楼2006-12-04 22:05 | jay[匿名][未注册用户]
Gentle.net和subsonic都不错
  回复  引用  查看    
#52楼[楼主]2006-12-04 23:39 | TerryLee      
@jay[匿名]
Gentle.NET还是不错的,subsonic一般吧?

  回复  引用  查看    
#53楼2006-12-05 02:05 | George Ge      
曾经的NH更新过慢也不行,现在的NBear更新过快也不行,这个度还真不好掌握呢。

一直关注TerryLee的文章,带给我不少帮助,谢谢。

  回复  引用  查看    
#54楼[楼主]2006-12-05 09:21 | TerryLee      
@George Ge
是啊

  回复  引用  查看    
#55楼2006-12-07 09:32 | MS的明天      
谢谢了,总结的很不错!
  回复  引用    
#56楼2006-12-07 17:02 | 飞越草原[未注册用户]
首先说声谢谢了.我觉得框架很多,我是刚刚在接触,应用.不知道该选择什么样的?类型太多.推荐也很多,主要是不相信对方说的.你的文章我看了很久比较相信.
不过我建议,可以对持久层立个专题,因为这个大家应用到的更多.

  回复  引用    
#57楼2006-12-08 09:59 | bobo[匿名][未注册用户]
@TerryLee
非常感谢你提供这么好的文章,在学习了Castle后,开始还觉得ActiveRecord非常方便,但后来打算应用到实际项目中时,感觉它的优点也成了它的缺点。在设计服务层时,我不希望直接将一个AR对象返回给调用者。可能有一个办法可以解决,就是再定义一组与AR对象类似的层,这一层是不包括CRUD的实体对象,服务层将AR对象转换为不包括CRUD(不包括领域逻辑)的对象后再返回给调用者,但这样效率似乎又大打折扣。这些天来,天天都在考虑这个问题,甚至考虑改用其它的ORM,请帮忙出出主意。

  回复  引用  查看    
#58楼2006-12-08 10:09 | Daniel Phang      
我一直用Ibatisnet,很不错!
  回复  引用  查看    
#59楼2006-12-08 10:20 | Anthan      
大家不会都用开源的数据持久层吧?我们公司用自己写的,但是可操作性不是很强,可又不能不用,真是麻烦啊。
其实这些东西在减轻我们开发繁重工作的同时又束缚着我们的手脚。
另外,这么多东东肯定各有各的优劣,没有绝对的好坏吧?适用于项目的才是最好的。

  回复  引用    
#60楼2007-03-02 15:06 | 飞白[未注册用户]
NHiberante不错,只有有点偏激,对于支持列表和报表的方式没有考虑,我已加了对这一块的支持。
  回复  引用  查看    
#61楼2007-03-13 17:13 | 克隆      
不说别的,不管别人怎么说,我还是支持你写的文章的,能把自己学的东西写出来,还共享给大家,这本来就是一种高尚的程序员精神

总之,写自己的文章,让别人看去吧 ^_^

  回复  引用    
#62楼2007-03-23 16:41 | 学习[未注册用户]
我想问一下,他们哪些是支持多数据库的??
  回复  引用    
#63楼2007-03-23 16:42 | 学习[未注册用户]
数据库他们都写成标准的SQL语句吗?还是不同数据库写不同的SQL?谢谢!
  回复  引用    
#64楼2007-04-27 18:50 | huangkit[未注册用户]
感觉NHibernate不错,可以节省很多的时间.但是如果表之间有多对多关联的时候要设置XML的配置文件有点麻烦.
  回复  引用    
#65楼2007-05-21 21:26 | sohbet[未注册用户]
a a aa aa a aa
  回复  引用  查看    
#66楼2008-01-21 17:00 | virus      
Nhibernate和NBATIS.NET这两个东西在映射方面孰优孰劣呢?
请简单分析一下应用场合
谢谢

  回复  引用  查看    
#67楼2008-01-21 17:31 | virus      
对了还有啊,O/R Mapping是不是只是用于webform啊,winform可以使用吗,winform没有xml文件啊

  回复  引用  查看    
#68楼2008-02-25 16:12 | nicholas.sun      
问个问题:
现在有了LINQ 这些数据持久层是不是意味着要退出这个舞台??
或者是不是要去修改整个框架,框架中运用LINQ??
还没有真正开始学习LINQ 可能问的有点笨笨的 ...

  回复  引用  查看    
#69楼[楼主]2008-02-26 18:58 | TerryLee      
@nicholas.sun
应该是一种互补的关系。。。

  回复  引用    
#70楼2008-05-13 06:05 | MIami Real Estate[未注册用户]
Hi, I would like to invite you into my site and see what you think and if you like what yousee maybe we can be....
http://miamicondo.cn
http://miamihotel.ws/
http://mlssearch.cn/

  回复  引用  查看    
#73楼2008-06-17 20:52 | virus      
请问在winform里,那种比较好呢,我是一下午的hibernate也没有成功,一回说编译不过,一会抛异常
  回复  引用  查看    
#74楼[楼主]2008-06-18 00:42 | TerryLee      
@virus
这跟是否是WinForm或者WebForm没多大关系。。。

报错是因为你代码的问题

  回复  引用  查看    
#75楼2008-10-24 15:18 | wjx      
你能帮我调试一个asp结合hibernate做的一个简单的网页
QQ:595465394 邮箱:wangjixiang00@126.com

  回复  引用  查看    
#76楼[楼主]2008-10-25 10:17 | TerryLee      
@wjx
对不起,时间有限,呵呵

  回复  引用    
#77楼2009-05-15 17:57 | 瞰云
简单看了一下iBATIS.NET,因为要做winform的开发,把sql语句都写在配置文件中,发布到客户端,那岂不是太危险了,不知道是这样吗?在网上没有找到具体的例子。

Linq的sql语句应该是自动生成的,感觉可能效率会低些,而且复杂的查询很难实现吧?不知道DLINQ如何,没有试过。

我现在想选一个,不知道用什么好。我还是喜欢直接写sql语句好些,请给点建议啊,谢谢!

  回复  引用  查看    
#78楼[楼主]2009-05-18 11:22 | TerryLee      
@瞰云
LINQ to SQL性能也没有想象中那么差,只要做好缓存等,不会有太大问题,另外Entity Framework也可以考虑一下。




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 579529





相关文章:

相关链接: