实体框架4与LINQ to SQL,适用于中小型应用程序,与SQL Server一起使用

Dan*_*tru 14 sql-server linq-to-sql entity-framework-4

在VS2010发布时,我在4月份看到了关于Stack Overflow上的L2S与EF4的一些讨论,即:

现在已经发布了Entity Framework 4.0的Linq-To-Sql?

实体框架值得转向新的小应用程序吗?

现在,经过6个月,大概人们已经与EF4进行了更多的交互,所以我对新观点感到好奇,特别是在考虑只使用SQL Server时.

我经常使用LINQ to SQL,并且只使用了EF4.我不介意跳进去学习更多的EF4,我不相信,如果我的应用程序只与SQL Server交谈,那值得额外的复杂性.

所以,如果你对这两者都有一些经验,那么你现在要开始一个新的中小型应用程序,使用SQL Server后端,你会选择哪一个?

当然,为什么......

Kri*_*erA 14

这取决于... :)

如果您不需要EF添加的任何额外功能,L2S通常是:

  • 更容易上手和使用,
  • 从Linq查询到TSQL的更直接的翻译,支持将更简单的.net方法转换为TSQL,而L2E依赖于"特殊"方法,比如日期/时间比较等,
  • 由于表和实体类之间的直接1:1映射,因此运行时开销较小.

EF增加了更多功能,例如支持其他RDBMS和比普通1:1更复杂的映射,支持几种不同类型的实体继承等.这带来了成本:

  • 运行时开销高于L2S,
  • 编写针对EF的linq查询更容易遇到由于使用不支持的CLR方法而无法转换为TSQL的表达式,或者需要使用L2E的" 特殊方法 ",以及
  • 由于双层(存储模型和概念模型)以及它们之间的映射,它可能需要花费更多的时间来绕过EF模型而不是L2S模型.在xml编辑器中手动调整模型文件并不罕见.

简而言之:

  1. 如果您的应用程序足够简单,您只需要支持SQL Server,并且您的数据库架构/数据模型足够干净,因此您不需要进行更高级的映射,那么L2S是一个很好的选择.虽然MSFT不太可能为其添加任何新的大功能,但这并不是必需的.它工作得很好,并解决了它应该解决的问题.许多应用程序和网站(包括这一个)在L2S上运行良好.
  2. 如果您需要支持除SQL Server之外的其他数据库,或者您的数据库模式与您想要的对象模型不匹配,或者您需要EF的其他"更大"功能,那么您应该使用EF.