2009-02-15 78 views
7

我有点惭愧地说我从未使用过ORM;你可能还记得我的大部分职业经历都是用经典的ASP来进行黑客攻击,而我所做的小.NET往往只是维护。有关.NET ORM看待学习的一些建议

对于我自己的职业生涯以及为工作中的新项目做准备(终于在.NET中完成了!)我正在寻找将ORM添加到我的技能组中 - 作为受虐狂我也是要在我参与此项目时,请看TDD。无论如何,我使用.NET 3.5作为项目(或者计划,反正),所以我正在试图决定我想要选择什么样的ORM;就像我说过的我并不是很熟悉他们,但我通常知道他们应该做什么以及他们是如何做到的。我的选择基本上取决于NHibernate或LINQ/Entity Framework。我没有用过,但是我看过一些LINQ2SQL和NHibernate的演示。我们希望探索更多的内容,NHibernate好像整体上更健壮(Linq2Sql甚至不是“真正的”ORM),也非常适用于ALT.NET社区。然而,EF是微软的产品,因此,大多数开发团队会大量使用EF,他们只是使用微软提供的任何产品,而不会考虑其他选择。

我听说过EF的优点和缺点,但我想挑选一些能给我打下良好基础的东西,以及在其他公司找到更好的工作时,真正的开发团队。

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

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

回答

13

我会推荐nhibernate - 因为它是开源的,并有一个非常活跃的社区帮助很容易得到。一个很好的起点是The NHibernate FAQ,它的范围从初学者到非常先进的概念。通过阅读并遵循Prepare your system for NHibernateYour first NHibernate based application来击败地面。

我工作的所有雇主使用NHibernate在.NET中使用ORM,在Hibernate中使用Java在ORM中 - 所以您应该从学习NHibernate中获益良多。

1

由于您使用.NET 3.5,我推荐LINQ。
只有IEnumerable和IQueryable接口被实现,LINQ才会使用。
这意味着它不限于关系数据。
ALSE看到一篇关于堆栈溢出有关这个主题的ORM in .NET 3.5

1

对于免费和开源的路由,NHibernate很难被击败。这是一个非常活跃的社区和大量支持的成熟的ORM。 NHibernate有一个初始的学习曲线,但是,我认为这是值得你投入的努力。如果你想留在Micrsoft的.NET世界中,LINQ是一个伟大的学习技术,而不仅仅是LINQ2SQL(正如你所说,它不是一个完整的ORM)因为LINQ可以应用于对象,XML和基本上IEnumerable/IQueryable的任何东西。

未来,我会推荐实体框架(再次,在微软的世界里)。在微软的LINQ2SQL团队中有几个scary sounding announcements,似乎表明所有未来的开发工作将被放入实体框架而不是LINQ2SQL。无论如何,这些技术都有一定的重叠。当然,我不认为LINQ(通常来说)很快就会消失,但我会小心地投资于LINQ2SQL中的术语。 实体框架还是比较新的,并且在积极的发展之下,所以我们期待在接下来的几个月/几年里EF会成熟。因此,就在这个时候,LINQ2SQL非常棒,你可以很快就熟悉并运行它,而不必深入其内部工作(即表达树等),但对于未来,我可以使用LINQ2SQL, d推荐实体框架/ NHibernate,因为我相信这两个ORM将是大多数.NET开发团队在未来几年中大部分使用的。

当然,那里有很多不同的ORM解决方案,我怀疑它们中的任何一个都不是一成不变的解决方案,所以你真的必须检查它们中的每一个,看哪个最适合你正在工作的特定项目。

2

为什么在学习时只限于一个人?为什么不涉足所有人,看看哪些人对你最好?然后,您可以开始深入了解这些技术,并从中获得更多。

就我个人而言,我会从LINQ to SQL开始,因为它非常简单。玩弄它只是为了习惯如何使用ORM的想法。你会惊讶于它的简单程度以及开始的容易程度,然后你可能会遇到许多让一些人进入实体框架的痛点。

一旦您稍微使用了Entity Framework,您会满意它,或者您会想知道nHibernate和其他相关问题中提到的其他问题。

就在这一点上,在我看来,你将会对nHibernate这样的事情大获成功,这可能是第一次进入ORM领域很难学习的东西。

无论哪种方式,我不开的“哪一个我应该尝试”的办学思想。我会说,全部尝试。

2

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

4

SubSonic罗布·康纳利是基于ActiveRecord的一个“瑞士军刀” ORM。你可以在30分钟内生产。需要警告的是,它不在NHibernate的配置选项等级中。它非常高效,代码非常干净。我们在大部分项目中都使用它。

+0

我使用它并喜欢它。虽然没有使用NHibernate,所以也许我的参考框架被搞砸了。 – geofftnz 2009-02-15 19:51:38

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以外的其他工具。 LINQ to SQL如果你只是想针对SQL Server运行。

+0

不错的工作,详细说明亲和骗局。 – 2009-02-16 01:34:09

1

结帐XmlDataMapper相比于其他巨头留下一个低内存占用一个简单的自由ORM(LGPL许可证)。
提供的示例项目应该足够好,可以开始使用。

要整合XmlDataMapper所有你需要做的是四个小步骤

  1. 创建业务实体/ DTO的表
  2. 创建表和DTO之间的映射信息的XML文件。
  3. 指定配置中的DTO和xml文件。
  4. 只需调用DTOConverter即可。转换(dataReader)和其他这样的方法来将您的数据库记录转换为DTO /商业实体