现在,.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-如果您计划编辑一对一的表示层中数据的关系。意思是你不要计划在任何一个视图中组合来自多个表的数据或第页。实体框架-如果您计划在视图或页面中组合来自多个表的数据。制作更清楚的是,上述术语是特定于在视图或页面中操纵,而不仅仅是显示。这是重要的是要理解。使用实体框架,您可以将表格数据“合并”在一起以可编辑的形式呈现给演示层,然后提交表格后,EF将知道如何更新所有数据从各种表格中选择。可能有更准确的理由选择EF而不是L2S,但是这可能是最容易理解的。L2S没有能够合并数据以进行视图显示。
其他回答
我在这里找到了一个非常好的答案,它解释了何时使用简单的词语:
使用哪个框架的基本经验法则是如何规划在演示层中编辑数据。Linq To Sql-如果您计划编辑一对一的表示层中数据的关系。意思是你不要计划在任何一个视图中组合来自多个表的数据或第页。实体框架-如果您计划在视图或页面中组合来自多个表的数据。制作更清楚的是,上述术语是特定于在视图或页面中操纵,而不仅仅是显示。这是重要的是要理解。使用实体框架,您可以将表格数据“合并”在一起以可编辑的形式呈现给演示层,然后提交表格后,EF将知道如何更新所有数据从各种表格中选择。可能有更准确的理由选择EF而不是L2S,但是这可能是最容易理解的。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. |
这里的答案涵盖了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之上支持一系列不同的应用程序。
在@lars发布的文章中,有许多明显的区别,但简短的回答是:
L2S是紧密耦合的-对象属性到数据库的特定字段,或者更正确地将对象映射到特定数据库模式L2S仅适用于SQL Server(据我所知)EF允许将单个类映射到多个表EF将处理M-M关系EF将能够针对任何ADO.NET数据提供程序
最初的前提是L2S用于快速开发,EF用于更多的“企业级”n层应用程序,但这使L2S的销售有点不足。