为新项目选择OR Mapper

时间:2010-08-04 07:55:54

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

我们即将开始一个新项目。它将是一组具有大量共享组件的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查询。可能我不需要延迟加载,因为我将仔细构建将从DB获取的所有我需要的精确方法。
  3. 我不是在寻找这种情况的判决。我要求的是一个小小的讨论,指出一些我没有考虑过的问题,或者只是与我分享一些关于不仅使用BLToolkit而且还使用其他或mappers的经验。

4 个答案:

答案 0 :(得分:4)

BLToolkit在俄语forum上有很棒的社区,你很容易用英语提问,因为这个社区的大多数成员都懂英语。

答案 1 :(得分:3)

您是否可以使用您正在考虑的几种不同的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。

答案 2 :(得分:2)

ormbattle.net网站可能非常缺乏领先优势,因为不同的ORM旨在以不同的方式使用,因此简单的基准测试不会告诉您匹配。

您有两个基本选项。

  • 选择系统和数据库架构的设计,然后找到一个适合它的数据访问系统。
  • 或者选择数据访问系统并设计数据库模式以便与之配合使用。

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

问题在于,没有ORM能够很好地应对所有类型的数据库模式,除非您之前已经编写过其他类似的系统,否则在开发系统之前您不太可能知道所有数据存储需求。

请记住,如果您发现某些更新的ORM速度很慢,您可以随时绕过ORM并使用手写SQL。

答案 3 :(得分:2)

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

  • 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

祝你好运