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

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

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


当前回答

我的印象是,如果Linq2Sql不符合您的需求,那么您的数据库就相当糟糕或者设计得非常糟糕。我有大约10个大大小小的网站都在使用Linq2Sql。我已经多次查看和实体框架,但我找不到在Linq2Sql上使用它的好理由。也就是说,我尝试使用我的数据库作为模型,所以我已经在模型和数据库之间建立了1对1的映射。

在我目前的工作中,我们有一个拥有200多个表的数据库。一个有很多糟糕解决方案的旧数据库,因此我可以看到实体框架优于Linq2Sql的好处,但我还是希望重新设计数据库,因为数据库是应用程序的引擎,如果数据库设计糟糕且速度慢,那么我的应用程序也会很慢。在这样的数据库上使用Entity框架似乎是一种快速修复方法,可以掩盖坏模型,但它永远无法掩盖从这样的数据库中获得的糟糕性能。

其他回答

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

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

我发现在使用EF时,我不能在同一个数据库模型中使用多个数据库。但在linq2sql中,我只需在模式名称前面加上数据库名称即可。

这是我最初开始使用linq2sql的原因之一。我不知道EF是否已经允许这一功能,但我记得读到它的初衷是不允许这一点。

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

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

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

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.

LINQ to SQL仅支持Microsoft SQL Server中可用的数据库表、视图、存储过程和函数的1对1映射。它是一个很好的API,可用于快速构建设计相对良好的SQL Server数据库的数据访问。LINQ2SQL首次与C#3.0和.Net Framework 3.5一起发布。

LINQ to Entities(ADO.Net Entity Framework)是一个ORM(对象关系映射器)API,它允许广泛定义对象域模型及其与许多不同ADO.Net数据提供程序的关系。因此,您可以混合和匹配许多不同的数据库供应商、应用程序服务器或协议,以设计由各种表、源、服务等构建的对象的聚合组合。ADO.Net Framework是与.Net Framework 3.5 SP1一起发布的。

这是一篇很好的MSDN入门文章:将LINQ引入关系数据