现在,.NET v3.5 SP1已经发布(与VS2008 SP1一起发布),我们现在可以访问.NET实体框架。

我的问题是这个。当试图决定使用实体框架和LINQ to SQL作为ORM时,有什么区别?

按照我的理解,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的“大哥”?如果是这样的话,它有什么好处?LINQ to SQL不能单独做什么?


当前回答

在@lars发布的文章中,有许多明显的区别,但简短的回答是:

L2S是紧密耦合的-对象属性到数据库的特定字段,或者更正确地将对象映射到特定数据库模式L2S仅适用于SQL Server(据我所知)EF允许将单个类映射到多个表EF将处理M-M关系EF将能够针对任何ADO.NET数据提供程序

最初的前提是L2S用于快速开发,EF用于更多的“企业级”n层应用程序,但这使L2S的销售有点不足。

其他回答

我在实体框架方面的经验并不出色。首先,您必须从EF基类继承,所以向POCO说再见。你的设计必须围绕EF。使用LinqtoSQL,我可以使用现有的业务对象。此外,没有延迟加载,您必须自己实现。有一些变通方法可以使用POCO和延迟加载,但它们存在IMHO,因为EF还没有准备好。我计划在4.0后重新开始

我在这里找到了一个非常好的答案,它解释了何时使用简单的词语:

使用哪个框架的基本经验法则是如何规划在演示层中编辑数据。Linq To Sql-如果您计划编辑一对一的表示层中数据的关系。意思是你不要计划在任何一个视图中组合来自多个表的数据或第页。实体框架-如果您计划在视图或页面中组合来自多个表的数据。制作更清楚的是,上述术语是特定于在视图或页面中操纵,而不仅仅是显示。这是重要的是要理解。使用实体框架,您可以将表格数据“合并”在一起以可编辑的形式呈现给演示层,然后提交表格后,EF将知道如何更新所有数据从各种表格中选择。可能有更准确的理由选择EF而不是L2S,但是这可能是最容易理解的。L2S没有能够合并数据以进行视图显示。

在@lars发布的文章中,有许多明显的区别,但简短的回答是:

L2S是紧密耦合的-对象属性到数据库的特定字段,或者更正确地将对象映射到特定数据库模式L2S仅适用于SQL Server(据我所知)EF允许将单个类映射到多个表EF将处理M-M关系EF将能够针对任何ADO.NET数据提供程序

最初的前提是L2S用于快速开发,EF用于更多的“企业级”n层应用程序,但这使L2S的销售有点不足。

我认为快速而肮脏的答案是

LINQ to SQL是实现这一目标的快速简便的方法。这意味着如果你正在做一些小的事情,你会更快地完成任务,更快地交付。实体框架是一种全面、无限制的方法。这意味着如果你在做更大的事情,你会提前花更多的时间,发展得更慢,并且有更大的灵活性。

LINQ to SQL Entity Framework
It only works with SQL Server database It can work with various databases like Oracle, DB2, MySQL, SQL Server, etc.
It generates .dbml to maintain the relation It generates a .edmx file initially. The relation is maintained using 3 different files; .csdl, .msl and .ssdl
It has not to support for complex types It has support for complex types
It cannot generate database from model It can generate database from model
It allows only one-to-one mapping between the entity classes and the relational tables/views It allows one-to-one, one-to-many, many-to-many mappings between the entity classes and relational tables/views
It allows you to query data using DataContext It allows you to query data using EntitySQL, ObjectContext, DbContext
It can be used for rapid application development only with SQL Server It can be used for rapid application development with RDBMS like SQL Server, Oracle, PostgreSQL, etc.