有关.NET ORM学习的一些建议

时间:2009-02-15 14:12:05

标签: .net linq nhibernate orm

我有点惭愧地说我从未使用过ORM;你可能还记得我的大部分职业经历都是使用Classic ASP进行攻击,而我所做的小.NET只是维护。

为了我自己的职业生涯以及为工作中的新项目做准备(最终在.NET中完成!)我正在考虑在我的技能组中添加一个ORM - 作为我的受虐狂我也将会看起来在我参加这个项目的时候在TDD。

无论如何,我正在使用.NET 3.5进行项目(或计划,反正)所以我试图决定我想要选择什么样的ORM;就像我说我对它们并不熟悉,但我一般都知道它们应该做什么,以及它们是如何做到的。我的选择基本上取决于NHibernate或LINQ / Entity Framework。我没有使用任何,但我已经看过一些LINQ2SQL和NHibernate的演示。

NHibernate似乎总体上更强大(Linq2Sql甚至不是“真正的”ORM)以及在ALT.NET社区中大量使用,我想要更多地探索它。但是,EF是微软的产品,因此,大多数开发团队都会大量使用EF,他们只使用微软推出的任何产品,而不会考虑任何其他选择。

我听说过关于英孚的好事和坏事,但是如果/当我在一家真正的公司找到一份更好的工作时,我想选择能给我一个良好基础的东西以及对其他雇主好看的东西开发团队。

编辑:我应该补充一点,如果在选择ORM时有任何问题,应用程序将不得不处理现有数据库。

编辑(02/15/2009 6:48 PM):它将使用的唯一数据库是SQL Server 2005 Standard,在Windows Server 2003上运行。鉴于这是一个工作项目,我的目标是选择一些不会花费我很长时间才能加快速度的东西(因为我需要提高效率,“学习新工具”对管理来说不会很好)但是比滚动我自己的DAL更好的东西。当时我还没有确定应用程序是智能客户端还是ASP.NET应用程序,但其中一部分很可能是用ASP.NET MVC完成的。

9 个答案:

答案 0 :(得分:13)

我建议使用nhibernate - 因为它是开源的,并且有一个非常活跃的社区帮助很容易获得。一个很好的起点是The NHibernate FAQ,其范围从初学者的帖子到非常高级的概念。通过阅读并关注Prepare your system for NHibernateYour first NHibernate based application来实现目标。

我所工作的所有雇主都使用NHibernate for .NET中的ORM和Hibernate for Java中的ORM - 所以你应该从学习NHibernate中获益匪浅。

答案 1 :(得分:4)

来自Rob Connery的

SubSonic是一款基于ActiveRecord的“瑞士军刀”ORM。您可以在30分钟内使用它。请注意,它不是NHibernate的配置选项等等。它非常高效,而且代码非常干净。我们在大多数项目中使用它。

答案 2 :(得分:2)

关于Stack Overflow上的这个主题的许多讨论:

What object mapper solution would you recommend for .net?

What is the best data access paradigm for scalability?

Persistence framework?

EF和Nhibernate都被认为对大型项目有用。关于EF表达的一些主要担忧是缺乏延迟加载/持久性无知。 Nhibernate具有更陡峭的学习曲线,需要更多的手动配置。

答案 3 :(得分:2)

为什么在学习的同时限制自己只有一个?为什么不跟他们一起玩,看看哪个最适合你呢?然后,您可以开始深入研究这些技术,并从中获得更多。

就个人而言,我会从LINQ to SQL开始,因为它太简单了。玩它只是为了习惯如何使用ORM。你会惊讶于它的简单性和开始是多么容易,然后你可能会遇到许多导致一些人加入Entity Framework的痛点。

一旦你使用了Entity Framework,你会对它感到满意,或者你会想知道nHibernate与相关问题中提到的其他一些内容有什么关系。

在我看来,正是在这一点上,你将为nHibernate这样的东西取得成功做好准备,这可能是第一次尝试进入ORM-land时难以学习的。

无论哪种方式,我都没有规定“我应该尝试哪一个”思想学派。我说,试试这些。

答案 4 :(得分:2)

我会说NHibernate。它被广泛使用,有许多教程和学习资源以及一个活跃的贡献组。它与Hibernate类似,这意味着您在.NET NHibernate上学到的任何技能都可以移植到Java。互利双赢等。 :)

答案 5 :(得分:2)

我第二次大卫罗宾斯提到亚音速。我要指出的一个缺点是文档不完美。使用它真的很简单,你只需要知道如何去做。

我想还有一件值得一提的事:你需要支持哪些数据库?如果你需要使用SQL Server以外的任何东西,我不会使用LINQ。我可能错了,但上次检查时,除了SQL Server之外,没有任何对数据库的良好支持。

我要提到的最后一件事是你不必只选择一个。我在同一个项目中使用了nHibernate,LINQ to SQL和Subsonic并取得了不错的成功(尽管我建议尽可能避免这种情况)。我的建议是花一点时间与所有人一起学习每个人的最佳状态。

以下是我对每一个人的看法:

  • LINQ to SQL - 非常容易启动和运行。但是如果你想使用SQL Server之外的其他东西,你就是SOL。
  • NHibernate - 这可能是所有ORM中最强大的,并且它支持大多数RDBMS,但是由于没有很多非常好的免费代码生成器可以使用,因此它可能很繁琐(可以'尽管如此,请代表非自由的人。
  • SubSonic - NHibernate与LINQ to SQL之间的良好折衷。它不支持与NHibernate一样多的RDBMS,但它适用于您在商业世界中遇到的大多数RDBMS。

TL; DR :NHibernate如果您需要对数据库进行大量控制或需要支持一些模糊的东西。 SubSonic如果您需要使用SQL Server以外的其他东西。如果您只想对SQL Server运行,请使用LINQ to SQL。

答案 6 :(得分:1)

由于您使用的是.NET 3.5,我推荐使用LINQ LINQ仅要求实现IEnumerable和IQueryable接口 这意味着它不仅限于关系数据 另请参阅文章ORM in .NET 3.5

答案 7 :(得分:1)

对于免费和开源的路线,NHibernate很难被击败。这是一个成熟的ORM,拥有非常活跃的社区和充足的支持。 NHibernate有一个初步的学习曲线,但是,我认为你可能投入的努力是值得的。

如果你想留在Micrsoft的.NET世界中,LINQ是一个很好的学习技术,而不仅仅是LINQ2SQL(正如你所说,它不是一个完整的ORM),因为LINQ可以应用于对象, XML和基本上任何IEnumerable / IQueryable。

对于未来,我推荐Entity Framework(再次,在Microsoft世界范围内)。微软内部的LINQ2SQL团队中有一些scary sounding announcements似乎表明所有未来的开发工作都将放入实体框架而不是LINQ2SQL。无论如何,这些技术存在一定程度的重叠。当然,我不相信LINQ(一般来说)很快就会消失,但我会小心投资LINQ2SQL中的 long 术语。 实体框架仍然相对较新,并且在积极开发中,因此期望EF在未来几个月/几年内成熟。

所以,就在这时,LINQ2SQL很棒,你可以很快地启动并运行它,而不必深入研究它的内部工作(即表达树等)但是对于未来,我会推荐实体框架/ NHibernate,因为我相信这两个ORM将成为大多数.NET开发团队在未来几年中大部分使用的ORM。

当然,那里说有很多不同的ORM解决方案,我怀疑它们中的任何一个都是一个通用的解决方案,所以你真的需要检查每个解决方案,看看哪个最适合您正在进行的特定项目。

答案 8 :(得分:1)

结帐XmlDataMapper一个简单的免费ORM(LGPL许可证),与其他巨头相比,内存占用空间较小。
提供的示例项目应该足够好以便开始。

要集成XmlDataMapper,您需要做的只有4个小步骤

  1. 为表格创建业务实体/ DTO
  2. 使用表格和DTO之间的映射信息创建XML文件。
  3. 在配置中指定DTO和xml文件。
  4. 只需调用DTOConverter.Convert(dataReader)和其他此类方法将您的数据库记录转换为DTO / Business Entity