Linq to sql .NETFramework 4.0中的Linq2SQL与EF

Linq to sql .NETFramework 4.0中的Linq2SQL与EF,linq-to-sql,entity-framework,orm,.net-4.0,entity-framework-4,Linq To Sql,Entity Framework,Orm,.net 4.0,Entity Framework 4,那么现在对这两种产品的结论是什么?我似乎找不到专门针对VS2010/.net 4.0的有关此问题的任何信息 回到.NET3.5时代,大多数人认为,当.NET4.0出现时,Linq2SQL将消亡,但它似乎还活着,还不错 另一方面,EF4.0似乎得到了显著的改进 对我来说,到目前为止,我的大部分工作都是中小型项目,我的公司正在从VS08迁移到VS10 soonish。我应该看什么?或者说真的,我是应该花时间学习EF4.0呢,还是应该花更多的时间学习nHibernate呢?(但回到主题上来,我对Lin

那么现在对这两种产品的结论是什么?我似乎找不到专门针对VS2010/.net 4.0的有关此问题的任何信息

回到.NET3.5时代,大多数人认为,当.NET4.0出现时,Linq2SQL将消亡,但它似乎还活着,还不错

另一方面,EF4.0似乎得到了显著的改进

对我来说,到目前为止,我的大部分工作都是中小型项目,我的公司正在从VS08迁移到VS10 soonish。我应该看什么?或者说真的,我是应该花时间学习EF4.0呢,还是应该花更多的时间学习nHibernate呢?(但回到主题上来,我对Linq2Sql-EF更感兴趣。)

最后,我目前正在使用entlib/unity,哪个框架对依赖项/策略注入更友好


提前感谢。

我们刚刚从VS2008升级到VS2010,从L2S升级到EF

尽管我们使用EF的方式与L2S非常相似,但我知道如果需要,我可以灵活地执行更高级的ORM,这让我感到欣慰

也就是说,对于一个小项目,我可能仍然会使用L2S。中型到大型项目,我会使用EF

另外,EF看起来像一条巨大的学习曲线,因为EF文档促使我们开始研究一些设计模式,比如工作单元、存储库、依赖注入。然而,我意识到这些模式适用于L2和EF


就Nhibernate而言——我的研究(即浏览SO)表明,EF4.0的最新版本已经足够先进(POCO支持等),可以被视为竞争产品。

以下是实体框架(v4)更好的一些原因:

1-L2SQL基本上已经过时

2-L2SQL不支持POCO映射,EF支持

3-EF具有更大的灵活性(代码优先、模型优先、数据库优先)。L2SQL只有1个

4-EF支持存储过程->POCO映射

5-EF具有实体SQL,允许您在需要时返回经典ADO.NET

6-EF支持继承(TPT、TPH)

7-EF与存储库模式齐头并进,并通过IQueryable延迟执行

8-EF组件(ObjectSet、ObjectContext)易于模拟,并允许DI

我想不出为什么新项目应该使用L2SQL

有人可能会说“L2SQL对于小项目很好,我可以拖放并完成它”

您也可以使用EF4实现这一点,如果您决定修改/扩展您的项目,那么从长远来看,您将拥有更多的灵活性/支持。所以这不是借口


HTH

L2S哪儿也去不了。VS团队已经明确了这一点。它不会得到显著的改进,但它仍然存在,并且工作得很好


L2S非常好,并且易于用于具有相当简单的数据模型的小规模项目。对于我来说,选择EF而不是L2的触发因素是如果我有多对多表,或者我需要在多个表上映射更复杂的实体。

只需添加到前面的答案和评论中(所有三个都得到了我的+1票):

a) 性能:L2S运行时比EF更轻量级(因为只有一个层;EF必须处理两个模型层以及它们之间的映射)

EF通常生成比L2S更详细的TSQL,但大多数情况下,只有在分析和查看生成的查询时,才会影响可读性;SQL优化器在大多数情况下都会得到相同的执行计划。但是,在某些情况下,查询会变得如此庞大和复杂,从而影响性能

L2S在查询的客户端优化方面也略胜一筹;它消除了可以在客户端计算的where子句谓词,因此数据库不必担心它们。这意味着SQL Server优化器的工作量减少,最终执行计划“糟糕”的风险也降低

b) L2S vs L2E:L2S在将使用普通CLR方法的LINQ查询转换为TSQL方面仍然略优于L2E,尤其是在涉及DateTime及其相关方法时。L2E通过其自己的EntityFunctions类支持大致相同的内容:

在我看来,L2和EF都是不错的选择,选择一个你觉得合适的,涵盖了你现在和你正在编写的代码的合理生命周期内需要的东西。在你意识到这一点之前,微软可能会宣布另一种数据访问技术。他们似乎每3-5年做一次……:)DAO、RDO、ODBC、ADO、OLEDB、ADO.NET、类型化数据集、对象空间、WinFS、L2S、EF。。。等等。我15年前针对DAO编写的代码仍然存在,在市场上仍然存在的应用程序中,尽管DAO已经“死”了很多年,但它仍然有效


有时名称会被重新用于全新的数据访问技术,但这并不能改变这样一个事实,即构成Microsoft最新数据库访问技术的任何东西都是一个不断移动的目标……

如果第三方产品适合您,请尝试使用。此产品允许您将Linq to SQL(经过一些修改)与不同的DBMS(Oracle、MySQL、PostgreSQL等)一起使用。
LinqConnect为您提供了以下L2S早期版本中不可用的功能:

  • 模型优先法
  • TPT和TPH支持
  • POCO支持
  • 模型和数据库的自动同步,无数据丢失
至于性能,对我们供应商的最新比较测试是领先的


此外,我们的数据库也支持所有EF函数。

我知道这对于原始查询来说可能太晚了,但为了将来有类似问题的人

在我看来,关键的方面是您是在做一个全新的项目,还是在使用遗留数据库。我正在使用一个遗留数据库,它有一些非常独特的设计