实体框架与LINQ to SQL
既然已经发布了.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卖得短了一点。
回答
我认为快速而肮脏的答案是
- LINQ to SQL是一种快速简便的方法。这意味着我们将变得更快,如果我们正在做较小的事情,则可以更快地交付。
- 实体框架是一种万无一失的方法。这意味着如果我们从事更大的工作,那么我们将需要更多的前期时间,较慢的开发速度以及更大的灵活性。
回答
如果数据库简单明了,则LINQ to SQL可以。如果我们需要在表顶部放置逻辑/抽象的实体,请使用Entity Framework。
回答
LINQ to SQL仅支持Microsoft SQL Server中可用的数据库表,视图,存储过程和函数的一对一映射。这是一个很棒的API,可用于对相对设计良好的SQL Server数据库进行快速数据访问构建。 LINQ2SQL最初与C3.0和.Net Framework 3.5一起发布。
LINQ to Entities(ADO.Net实体框架)是一个ORM(对象关系映射器)API,它允许对对象域模型及其与许多不同的ADO.Net数据提供者的关系进行广泛定义。这样,我们可以混合并匹配许多不同的数据库供应商,应用程序服务器或者协议,以设计由各种表,源,服务等构造的对象的聚合混搭。ADO.Net Framework与.Net Framework 3.5 SP1.
这是有关MSDN的很好的介绍性文章:
将LINQ引入关系数据
回答
LINQ to SQL真的死了吗?通过乔纳森·艾伦为InfoQ.com
Matt Warren describes [LINQ to SQL] as something that "was never even supposed to exist." Essentially, it was just supposed to be stand-in to help them develop LINQ until the real ORM was ready. ... The scale of Entity Framework caused it to miss the .NET 3.5/Visual Studio 2008 deadline. It was completed in time for the unfortunately named ".NET 3.5 Service Pack 1", which was more like a major release than a service pack. ... Developers do not like [ADO.NET Entity Framework] because of the complexity. ... as of .NET 4.0, LINQ to Entities will be the recommended data access solution for LINQ to relational scenarios.
回答
我的印象是,如果Linq2Sql不符合需求,则数据库相当庞大或者设计不当。我有大约10个网站,无论大小,都使用Linq2Sql。我已经看过很多次Entity框架,但是找不到在Linq2Sql上使用它的充分理由。也就是说,我尝试将数据库用作模型,因此我已经在模型和数据库之间建立了一对一的映射。
在我目前的工作中,我们有一个包含200多个表的数据库。一个旧的数据库,其中有很多不良的解决方案,因此我可以看到Entity Framework优于Linq2Sql的好处,但是我仍然希望重新设计数据库,因为数据库是应用程序的引擎,如果数据库设计不良且运行缓慢,则我的应用程序也会很慢。在这样的数据库上使用Entity Framework似乎是掩盖不良模型的快速修补程序,但它永远无法掩盖从此类数据库中获得的不良性能。
回答
我对Entity Framework的经验不足。首先,我们必须继承EF基类,因此请与POCO道别。设计必须围绕EF。借助LinqtoSQL,我可以使用现有的业务对象。此外,没有延迟加载,我们必须自己实现。有一些解决方法可以使用POCO和延迟加载,但是它们存在恕我直言,因为EF尚未准备好。我打算在4.0之后再回来
回答
我认为,如果我们需要快速开发某些东西而中间没有任何奇怪的东西,并且我们需要这种设施可以使实体代表表:
Linq2Sql可以是一个很好的盟友,将它与LinQ一起使用可以释放出很好的开发时机。
回答
两者均不支持唯一的SQL 2008数据类型。从我的角度来看,不同之处在于,在将来的某些发行版中,Entity仍然有机会围绕我的地理数据类型构建模型,而Linq to SQL被遗弃,永远不会。
想知道nHibernate或者OpenAccess发生了什么...