现在,.NET v3.5 SP1已经发布(与VS2008 SP1一起发布),我们现在可以访问.NET实体框架。
我的问题是这个。当试图决定使用实体框架和LINQ to SQL作为ORM时,有什么区别?
按照我的理解,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的“大哥”?如果是这样的话,它有什么好处?LINQ to SQL不能单独做什么?
现在,.NET v3.5 SP1已经发布(与VS2008 SP1一起发布),我们现在可以访问.NET实体框架。
我的问题是这个。当试图决定使用实体框架和LINQ to SQL作为ORM时,有什么区别?
按照我的理解,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的“大哥”?如果是这样的话,它有什么好处?LINQ to SQL不能单独做什么?
当前回答
LINQ to SQL真的死了吗?Jonathan Allen为InfoQ.com撰写
马特·沃伦(Matt Warren)将[LINQ to SQL]描述为“根本就不应该存在”的东西。从本质上讲,在真正的ORM准备就绪之前,它只是应该帮助他们开发LINQ。...实体框架的规模导致它错过了.NET 3.5/VVisual Studio 2008的最后期限。它及时完成了不幸命名为“.NET 3.5 Service Pack 1”,它更像是一个主要版本,而不是一个Service Pack。...由于复杂性,开发人员不喜欢[ADO.NET实体框架]。...从.NET 4.0开始,LINQ to Entities将是LINQ to关系场景的推荐数据访问解决方案。
其他回答
我正在为一个使用Linq to SQL的大型项目的客户工作。当项目开始时,这是一个明显的选择,因为当时实体框架缺乏一些主要功能,Linq to SQL的性能要好得多。
现在EF已经进化,Linq to SQL缺少异步支持,这对于高度可扩展的服务非常有用。我们有时每秒有100多个请求,尽管我们已经优化了数据库,但大多数查询仍然需要几毫秒才能完成。由于同步数据库调用,线程被阻塞,无法用于其他请求。
我们正考虑切换到实体框架,仅用于此功能。遗憾的是,微软没有在Linq to SQL中实现异步支持(或者开源,所以社区可以这样做)。
2018年12月补遗:微软正在向.NET Core迁移,而Linq-2-SQL在.NET Core上不受支持,因此您需要迁移到EF,以确保将来可以迁移到EF.Core。
还有一些其他选项需要考虑,例如LLBLGen。它是一个成熟的ORM解决方案,已经存在了很长时间,并且已经被证明比MS数据解决方案(ODBC、ADO、ADO.NET、Linq-2-SQL、EF、EF.core)更具未来性。
在@lars发布的文章中,有许多明显的区别,但简短的回答是:
L2S是紧密耦合的-对象属性到数据库的特定字段,或者更正确地将对象映射到特定数据库模式L2S仅适用于SQL Server(据我所知)EF允许将单个类映射到多个表EF将处理M-M关系EF将能够针对任何ADO.NET数据提供程序
最初的前提是L2S用于快速开发,EF用于更多的“企业级”n层应用程序,但这使L2S的销售有点不足。
这里的答案涵盖了Linq2Sql和EF之间的许多差异,但有一个关键点没有得到太多关注:Linq2Sql只支持SQL Server,而EF为以下RDBMS提供了提供程序:
由Microsoft提供:
用于SQL Server、OBDC和OLE DB的ADO.NET驱动程序
通过第三方提供商:
MySQL数据库神谕分布式数据库维斯塔数据库数据库PostgreSQLInformix公司U2型Sybase公司Synergex公司火鸟Npgsql语言
举几个例子。
这使得EF成为关系数据存储的强大编程抽象,这意味着无论底层数据存储如何,开发人员都可以使用一致的编程模型。这在开发产品时非常有用,您希望确保产品能够与广泛的通用RDBMS互操作。
这种抽象有用的另一种情况是,您是一个开发团队的一部分,该团队与许多不同的客户或组织内的不同业务部门合作,您希望通过减少他们必须熟悉的RDBMS的数量来提高开发人员的生产力,以便在不同的RDBMS之上支持一系列不同的应用程序。
我认为,如果您需要快速开发一些东西,而中间没有奇怪的东西,那么您需要有代表您的表的实体:
Linq2Sql可以是一个很好的联盟,将它与LinQ一起使用可以释放出一个良好的开发时机。
我在这里找到了一个非常好的答案,它解释了何时使用简单的词语:
使用哪个框架的基本经验法则是如何规划在演示层中编辑数据。Linq To Sql-如果您计划编辑一对一的表示层中数据的关系。意思是你不要计划在任何一个视图中组合来自多个表的数据或第页。实体框架-如果您计划在视图或页面中组合来自多个表的数据。制作更清楚的是,上述术语是特定于在视图或页面中操纵,而不仅仅是显示。这是重要的是要理解。使用实体框架,您可以将表格数据“合并”在一起以可编辑的形式呈现给演示层,然后提交表格后,EF将知道如何更新所有数据从各种表格中选择。可能有更准确的理由选择EF而不是L2S,但是这可能是最容易理解的。L2S没有能够合并数据以进行视图显示。