你会选择什么样的ASP.NET webapp; nHibernate,Linq或SubSonic

时间:2008-10-09 18:48:19

标签: orm

或许别的什么? 我已经在使用nHibernate,但我偶尔会遇到一个懒惰的初始化代理对象实际上不会初始化的问题。我正在考虑尝试别的东西。该网站包含用户帐户,用户帖子和照片,以及对特定位置名称和标题/描述匹配的过滤。更不用说投票,评级和标记作为最爱。所有这些都会导致不同数量的数据库负载。

13 个答案:

答案 0 :(得分:5)

SubSonic目前在我们所有的webform应用程序中使用都非常成功。只需几分钟,您就可以从头开始生成整个数据库,以便在您的应用程序中使用。 SubSonic创建者Rob Conery有一些很棒的网络广播,详细介绍了在Web应用程序中设置SubSonic位的过程以及一些很酷的演示,以帮助您入门。查看SubSonic Project

答案 1 :(得分:4)

我已经将LLBLGen Pro用于我的ORM大约一年了,而且效果还算不错。虽然我没有使用过SubSonic,但我被告知它们是相似的。从头开始,它可以从您的数据库创建数据访问层,并且只需几分钟即可使用。有一点学习曲线,至少对我而言,但帮助文件提供了足够的信息来帮助您完成几乎所有遇到的事情。应用程序可以按原样安装使用,但也支持大量自定义(可能太多?)。

答案 2 :(得分:3)

我会使用NHibernate。持久性无知是我的主要卖点之一,而不受数据库约束是另一个。实体框架存在严重缺陷,不仅仅是缺乏延迟加载。 EF和LINQ2SQL都是新技术,而NHibernate非常成熟,并且已经看到了更多的动作。

NHibernate的另一个好处是能够在不编辑你的情况下切换数据库。我将它用于本地运行的集成测试,running them against SQLite and then SQL Server on the CI server

答案 3 :(得分:2)

我们在相当活跃的网站上使用ADO.NET Entity Framework(每天访问10,000次)。这对我们来说是可靠的。缺乏延迟加载很烦人,但它会让你考虑进入数据库。

答案 4 :(得分:2)

如果数据库中的继承模型与Linq非常有限的继承支持一起工作,那么我说要去Linq。如果你需要更复杂的继承方案,那么我会说你应该坚持使用NHibernate来解决你遇到的任何痛苦。

答案 5 :(得分:2)

另一个选项是Castle ActiveRecord。它在NHibernate之上实现了Active Record design pattern,并且还消除了大部分配置的痛苦(比如它的“isWeb”设置)和映射。

答案 6 :(得分:1)

如果您在使用延迟初始化代理时遇到特定问题,为什么不离开呢?或者只是懒人装袋。我认为在使用没有延迟加载的框架重写应用程序之前,值得一试。

答案 7 :(得分:1)

我在微软生态系统中的经历:

我在几个项目中使用了Linq2Sql,我遇到了azamsharp提到的'分层'问题。

如果您将POCO发送回逻辑或UI层,那么这并不会有多大帮助,但是Repository模式的实现有助于解决那些令人讨厌的分层和关注点问题。

A good basic Repository Impl

对于使用复杂语义(如投票或统计信息)的任何事物(基本上任何需要以不同于数据库中表示的方式显示或操作的域对象),ADO.Net实体框架都会为您提供一些优势。它可以通过包含复杂的数据检索来简化您的业务逻辑/数据访问层。

ADO.Net Entity Framework Overview

希望有所帮助!

答案 8 :(得分:1)

我喜欢SubSonic,因为配置和生成DAL非常容易。实现不是一个完整的ORM,因为它只为每个表创建一个类。能够使用存储过程可以补偿何时需要组合作为连接结果的对象。同样,SubSonic旨在实现功能,因此它将帮助您快速实现项目目标。

也就是说,你无法使用SubSonic来“组合对象” - 没有描述类之间关系的配置文件。数据库仍然决定了您如何塑造解决方案。

答案 9 :(得分:1)

我真的不在乎SubSonic。对我来说,它似乎是一个非常薄的DAL工具。使用SubSonic,我仍然会输入很多字符串文字,这似乎有点让我失望。就个人而言,我更喜欢LLBLGen:

http://www.llblgen.com/defaultgeneric.aspx

创始人Frans Bouma有一个非常好的博客,讨论围绕DAL和ORM技术的许多问题。

http://weblogs.asp.net/FBouma/

答案 10 :(得分:0)

LINQ是一个很好的选择。它在Stackoverflow上使用,在我当前的项目中,我们使用LINQ进行数据访问。

答案 11 :(得分:0)

Hibernate for Java项目,但毫无疑问,LINQ for .Net。为什么在内置LINQ时添加外部依赖?

答案 12 :(得分:0)

我也会选择LINQ,尽管我必须承认LINQ to SQL存在分层问题。我已经阅读了很多关于LINQ to SQL的文章,所有这些文章都表明它基本上是为RAD应用程序创建的。