Linq to SQL仍然是开发应用程序的可行选择吗?

Way*_*ina 3 .net nhibernate orm linq-to-sql

在Ruby on Rails的短暂(偶尔持续)工作之后,我正在阅读.NET的内容.我想知道在为新应用程序选择ORM时LINQ仍然是一个选择,或者我是否应该学习类似NHibernate的东西,而这似乎仍然很强大.我知道Linq基本上被实体框架所包含,但是当我尝试使用EF(这是前一段时间)时,我发现它太沉重而且"鼠标驱动"(即很多人都在与设计师一起玩).我在NHibernate上观看了一些简短的截屏视频,我确实喜欢它所强调的关注点的分离,以及你的模型可以保持清洁的想法.

LINQ的语法是相当不错的,虽然,但它不是一个真正的ORM,我不希望看到学习的东西,基本上是过时的时候我能学到东西是正在使用或将要使用(EF和/或NHibernate的,例如).

所以,是的LINQ还是什么,应该使用一个应用程序被认为是(让我们假设一个中度复杂的东西,不是一个简单的应用程序,而不是一个非常艰巨的任务,围绕复杂的像37Signal的高层一个基于Web的应用程序),或者是有什么相反,更值得一看?

Mic*_*dox 5

Linq不是ORM,Linq很棒.如果可能的话,你很可能想要使用Linq.

LinqToSql是一个ORM,虽然它非常轻巧.它为您提供基于SQL Server数据库定义的活动记录类型数据层类的基本(主要是一次)代码生成.虽然它支持一些基本的ORM功能,但大多数你想要的东西,你将不得不自己创建.

EntityFramework也是一个ORM.虽然它分享了LinqToSql的一些限制,但它也做了一些更好的事情,有些事情更糟.当前的V1有许多限制,其中一些将在随Visual Studio 2010推出的下一个版本(V4)中得到解决.

LinqToSql或EntityFramework都不是成熟的,经过验证的ORM.两者都有明显的缺点,你可能会遇到大多数"正常"的软件开发项目.

NHibernate提供了比微软ORM更多的功能,你会发现它几乎适用于任何"现实世界"的情况.如果您喜欢ActiveRecord模式,然后是Microsoft的ORM,NHibernate也支持Castle ActiveRecord.

所有这三个ORM都支持Linq.

一句谨慎.在项目中期切换ORM可能既困难又昂贵,具体取决于您将数据层与其他层分开的程度.你不能轻易地从例如LinqToSql开始,然后在遇到LinqToSql的许多限制之一时切换到例如NHibernate,除非你真的很聪明你如何将你的ORM与其他实现分离出来,根据ORM,可能非常困难.