【问题标题】:Choice of OR Mapper for a new project为新项目选择 OR Mapper
【发布时间】:2010-08-04 07:55:53
【问题描述】:

我们即将开始一个新项目。它将是一组具有大量共享组件的 Web 应用程序。它每天将有多达 50.000 个独立用户访问,它将是某种管理面板。所有项目都将在 asp.net mvc 2 中构建,它们都将在一个 SQL Server 数据库上运行。

在我找到ormbattle.net 网站之前,我们一直非常喜欢 NHibernate,与其他映射器相比,NHibernate 的性能测试看起来很差。在这个摘要中,我发现了我以前不知道的库。 BLToolkit 看起来很有前途,但有利也有弊。

BLToolkit 社区支持薄弱,示例很少,而且我真的没有听说有人在大型项目中使用过它。而且它非常轻量级,这意味着它不支持多对多关系、延迟加载和缓存...

另一方面,性能真的很棒,而且它对 Linq 的支持也很好。

在这种情况下,我会选择其中一种方式:

  1. 不要太在意性能,使用 Nhibernate 或 EF 或只使用 L2SQL(哪个更好?)并使用具有更有用功能的 ORMapper。
  2. 专注于出色的性能,并基于此 BLToolkit 构建一些自己的解决方案,主要将此库用作一个很好的基础。如果我将在 MVC 中使用动作缓存,我可能不需要缓存。可能我不需要关联,只要我可以使用连接表达式编写好的 LINQ 查询。可能我不需要延迟加载,因为我会仔细构建从数据库中获取所需的所有方法。

我不是在寻找对这种情况下的判决。我要求进行一些讨论,指出一些我没有考虑过的问题,或者只是与我分享一些关于不仅使用 BLToolkit 还使用其他映射器的经验。

【问题讨论】:

  • 刚刚在已接受的答案中添加了关于 NH3 alpha1 中 LINQ 的注释。
  • 您开始使用 BLToolkit 了吗?我也找到了这个项目,并鼓励我给它一个机会:)
  • 是的..我们正在我们的一个项目中使用它...我对此没有特别的问题,Linq支持非常好,所以使用没有问题...跨度>

标签: c# asp.net-mvc-2 orm


【解决方案1】:

BLToolkit 在俄语 forum 上有很棒的社区,您可以轻松地用英语提问,因为该社区的大多数成员都懂英语。

【讨论】:

  • 不错的链接,谢谢...你在一些商业\大项目中使用过BLToolkit吗?你对此有何感想?
  • 是的,我将 BLToolkit 用于商业产品,我将 NHibernate 用于另一个项目,这些是完全不同的工具。如果您需要可靠的解决方案,并且您将按照 Nhibernate 适合您的方式使用它。另一方面,BLToolkit 不是 ORM,它是创建 onw DAL 的好工具,它支持映射、请求生成等,但是您必须编写一些代码来满足您的需求,您将花费一些时间,但它的工作速度比休眠快得多,而且您可以更好地控制数据流。
  • 顺便说一句,你可以下载完整的 BLToolkit 代码,在那里你会找到一堆单元测试和示例。
  • 如果我使用 BLToolkit,这是我最喜欢的事情之一... 对代码的精确控制。它可以很好地工作,因为不会有太多的开发团队..
  • 这里还有一个 BLToolkit 的 Google 群组:groups.google.com/group/bltoolkit
【解决方案2】:

您能否使用您正在考虑的几个不同的 ORM 创建原型,并查看它们的性能是否足以满足您的需求?您可以编写一些一次性的“性能峰值”代码,并在 Visual Studio 中使用 data generator 使用示例数据填充您的表。

我认为基于替代方案性能不够好的信念来选择 ORM 是一种过早的优化 - 除非您已经进行了测试以确认您的怀疑。


关于 ormbattle.net,这里是 Ayende's prespective - 他是 NHibernate 开发人员之一。这是很久以前的事了,不知道ormbattle.net从那以后有没有变化。

LINQ to SQL 不再积极开发 - 因此,如果您想使用 Microsoft 的 ORM,EF 将是最佳选择。

我个人更喜欢 NHibernate 而不是 EF,但当前版本的 EF 确实比当前版本的 NHibernate 具有更完整的 LINQ 实现。 NHibernate 3(今年晚些时候推出)将拥有完整的 LINQ 支持,以及另一个名为 QueryOver 的类型安全 API。

【讨论】:

  • NHibernate 3 的发布日期是否已知?现在有一些 alpha、beta 或其他可用的东西吗?这听起来是个不错的选择,但在我们开始我们的项目之前,我没有太多时间了。
  • NHibernate 3 alpha 1 可在此处获得:sourceforge.net/projects/nhibernate/files。我认为最终的发布日期尚未确定。根据这个讨论线程,听起来好像是今年秋天,肯定在年底之前:groups.google.com/group/nhusers/browse_thread/thread/…
  • 很好..还有一个问题...是否有 Nhib3 的手册或任何示例可用?
  • 我认为 NH3 的文档还不够多。据我了解,主要的新功能是 QueryOver 和 LINQ。我链接到上面的 QueryOver;这里有一些关于新的 LINQ 支持的信息:nhforge.org/blogs/nhibernate/archive/2009/12/17/… 除了这些新功能之外,现有的 NH2 文档应该仍然是相关的。对于 NH2,有在线文档 (knol.google.com/k/fabio-maulo/nhibernate) 和截屏系列 (summerofnhibernate.com)。
  • 关于 NH3 alpha1 中的 LINQ:实际上,我们已经在@ORMBattle.NET 测试过它。非官方记分卡:goo.gl/YNgi,不久我将在 ORMBattle.NET 博客中对此进行回顾。恕我直言,有一些改进,但它们远非戏剧性。
【解决方案3】:

一个非常开放的问题 - 在一天结束时,我们列出了我们的要求/期望并从那里开始。一些选择标准包括:

  • LINQ 支持
  • POCO 支持与专有/嵌入式实体
  • 急切加载/延迟加载
  • 在需要更多功率时允许自定义 Sprocs

一些链接 Best ORM to use with C# 4.0

http://ormbattle.net/

Ayende 比较 EF4 和 NH2.5+ http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

祝你好运

【讨论】:

    【解决方案4】:

    ormbattle.net 网站可能非常失败,因为不同的 ORM 被设计为以不同的方式使用,所以简单的基准测试并不能告诉你匹配。

    您有两个基本选择。

    • 选择系统和数据库架构的设计,然后找到适合它的数据访问系统。
    • 或者选择数据访问系统并设计您的数据库模式以使其很好地工作。

    例如,如果您选择 Nhibernate,您会发现 Nhibernate 专家将使用给定样式的数据库模式(和对象)。复制它们,您将有最少的痛苦。

    问题在于,没有任何 ORM 能够很好地处理所有样式的数据库模式,并且除非您之前编写过另一个类似的系统,否则您在系统开发很长一段时间之前不太可能知道您的所有数据存储需求是什么。

    请记住,如果您发现您的 ORM 在某些更新方面速度较慢,您始终可以绕过 ORM 并使用手写 SQL。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2011-09-11
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多