首先,如果您要开始一个新项目,请使用Entity Framework(“ EF”)-它现在生成的SQL更好(更像Linq to SQL一样),并且比Linq to SQL更易于维护和更强大(“ L2S”)。从.NET 4.0版本开始,我认为Linq to SQL是一种过时的技术。MS对于不再继续进行L2S开发一直很开放。
1)表现
这很难回答。对于大多数单实体操作(CRUD),您会发现这三种技术的性能差不多。您必须知道EF和Linq到SQL的工作方式,才能充分利用它们。对于轮询查询之类的大量操作,您可能希望EF / L2S“编译”您的实体查询,这样框架就不必不断重新生成SQL,否则您可能会遇到可伸缩性问题。(请参见编辑)
对于要更新大量数据的批量更新,原始SQL或存储过程的性能总是比ORM解决方案好,因为您不必通过网络将数据封送至ORM即可执行更新。
2)发展速度
在大多数情况下,就开发速度而言,EF会吹走裸露的SQL /存储过程。EF设计人员可以在模型更改时(根据请求)从数据库更新模型,因此您不会在目标代码和数据库代码之间遇到同步问题。我唯一不考虑使用ORM的情况是,您正在执行不进行任何更新的报告/仪表板类型的应用程序时,或者在创建仅用于对数据库进行原始数据维护操作的应用程序时。
3)整洁/可维护的代码
毫无疑问,EF击败了SQL / sproc。因为您的关系是建模的,所以在您的代码中加入联接的频率相对较低。对于大多数查询,实体的关系对于读者几乎是不言而喻的。为了理解数据实际发生的事情,没有比进行层级调试或通过多个SQL /中间层更糟糕的事情了。EF以非常强大的方式将数据模型带入代码中。
4)灵活性
存储的proc和原始SQL更“灵活”。您可以利用sproc和SQL来为奇特的特定情况生成更快的查询,并且可以比使用ORM更轻松地利用本机数据库功能。
5)总体
不要陷入选择ORM与使用存储过程的错误二分法中。 您可以在同一应用程序中使用它们,也许应该。大批量操作应在存储过程或SQL(可以由EF实际调用)中进行,并且EF应该用于CRUD操作和大多数中间层需求。也许您会选择使用SQL编写报告。我想这个故事的寓意和以往一样。使用正确的工具完成工作。但是它很肤浅,如今,EF非常好(从.NET 4.0开始)。花一些实时阅读和深入了解它,您可以轻松创建一些出色的高性能应用程序。
编辑:EF 5通过自动编译的LINQ查询简化了这一部分,但是对于真正的大批量产品,您肯定需要测试和分析在现实世界中最适合您的东西。