Orm 你会为你的ASP.NET网络应用选择什么;nHibernate、Linq或亚音速

Orm 你会为你的ASP.NET网络应用选择什么;nHibernate、Linq或亚音速,orm,Orm,也许还有别的事? 我已经在使用nHibernate了,但是我偶尔会遇到一些问题,其中惰性初始化的代理对象实际上不会初始化。我想试试别的。该网站拥有用户帐户、用户帖子和照片,并将其过滤到特定的位置名称和标题/描述匹配项。更不用说投票、评级和评分了。所有这些都会导致不同数量的数据库负载。我们在一个相当活跃的站点上使用ADO.NET实体框架(每天10000次访问)。这对我们来说是可靠的。缺少延迟加载是令人恼火的,但它会让您考虑访问数据库。LINQ是一个不错的选择。它在Stackoverflow上使用,

也许还有别的事?
我已经在使用nHibernate了,但是我偶尔会遇到一些问题,其中惰性初始化的代理对象实际上不会初始化。我想试试别的。该网站拥有用户帐户、用户帖子和照片,并将其过滤到特定的位置名称和标题/描述匹配项。更不用说投票、评级和评分了。所有这些都会导致不同数量的数据库负载。

我们在一个相当活跃的站点上使用ADO.NET实体框架(每天10000次访问)。这对我们来说是可靠的。缺少延迟加载是令人恼火的,但它会让您考虑访问数据库。

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

亚音速目前已成功应用于我们所有的网络表单应用程序中。在几分钟内,您可以从头开始生成整个数据库,以便在应用程序中使用。亚音速制作人罗布·科纳利(Rob Conry)有一些很棒的网络广播,详细介绍了在web应用程序中设置亚音速位的过程,还有一些很酷的演示让您开始。查看。

我在ORM中使用了大约一年,效果相当不错。虽然我没有使用亚音速,但我听说它们是相似的。从零开始,它可以从您的数据库创建一个数据访问层,只需几分钟即可使用。这是一个轻微的学习曲线,至少对我来说是这样,但是帮助文件提供了足够的信息,让你完成几乎所有你遇到的事情。该应用程序可以按安装的方式使用,没有问题,但也支持大量定制(可能太多?)

Hibernate用于Java项目,但毫无疑问,LINQ用于.Net。既然内置了LINQ,为什么还要添加外部依赖项?

我也会选择LINQ,尽管我必须承认LINQ到SQL存在分层问题。我读过很多关于LINQtoSQL的文章,它们都表明它基本上是为RAD应用程序创建的

如果数据库中的继承模型使用Linq非常有限的继承支持,那么我建议使用Linq。如果您需要更复杂的继承场景,那么我会说您应该坚持使用NHibernate,并克服它带来的任何痛苦。

如果您在惰性初始化代理方面遇到具体问题,为什么不放弃它呢?或者只懒洋洋地装袋子。我认为,在用for框架重写应用程序之前,值得一试。无需延迟加载。

另一种选择是。它在NHibernate的基础上实现了,还消除了配置(例如,它的“isWeb”设置)和映射的大部分痛苦。

我在Microsoft生态系统中的经验:

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

如果您死心塌地地想将POCO发送回您的逻辑层或UI层,这并不是说它会有多大帮助,但是存储库模式的实现对解决这个令人讨厌的分层和关注点分离问题有点帮助

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


希望有帮助

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


NHibernate的另一个优点是能够在不编辑数据库的情况下切换数据库。我将其用于本地运行的集成测试。

我喜欢亚音速,因为它很容易配置和生成DAL。该实现不是一个成熟的ORM,因为它只为每个表创建一个类。能够使用存储过程可以补偿您需要合成作为联接结果的对象的时间。同样,亚音速的目的是发挥作用,因此它将帮助您快速实现项目目标


也就是说,您不能使用亚音速来“组合对象”——没有描述类之间关系的配置文件。数据库仍然指示您如何形成解决方案

我真的不喜欢亚音速。对我来说,这似乎是一个非常薄的工具。对于亚音速,我仍然在输入大量字符串文字,这似乎有点违背了我的观点。就个人而言,我更喜欢LLBLGen:

创作者Frans Bouma有一个非常好的博客,讨论了DAL和ORM技术的许多问题


我非常鼓励您尝试发现NHibernate出现间歇性延迟加载问题的原因。这在正常情况下不会发生。可能是因为没有使用最新版本,因为我们构建在NHibernate上的访问层最常用的方法不再受支持。考虑重写它可能和选择一个新的解决方案一样困难。llblgenprorocks!延迟加载、预取路径(用最少的查询获取整个图形)、支持无限嵌套谓词、连接等。此外,扩展生成的代码非常容易;自助服务模式使用继承策略来允许扩展而不中断生成。因为捆绑的东西并不意味着它是最好的。您需要阅读ALT.NET宣言。