实体框架VS LINQ to SQL VS ADO.NET和存储过程?

实体框架VS LINQ to SQL VS ADO.NET和存储过程?,sql,linq-to-sql,entity-framework,ado.net,linq-to-entities,Sql,Linq To Sql,Entity Framework,Ado.net,Linq To Entities,您将如何从以下方面对他们进行评价: 演出 发展速度 简洁、直观、可维护的代码 灵活性 总体上 我喜欢我的SQL,因此一直是ADO.NET和存储过程的铁杆粉丝,但最近我玩了一个Linq to SQL,被我写数据访问层的速度所打动,决定花一些时间真正理解Linq to SQL或EF。。。或者两者都没有 我只是想检查一下,这些技术中没有任何一个会让我的研究时间变得无用的重大缺陷。例如,性能很糟糕,对于简单的应用程序来说很酷,但只能让你走这么远 更新: 你能专注于EF VS L2S VS SPs而不是O

您将如何从以下方面对他们进行评价:

  • 演出
  • 发展速度
  • 简洁、直观、可维护的代码
  • 灵活性
  • 总体上
  • 我喜欢我的SQL,因此一直是ADO.NET和存储过程的铁杆粉丝,但最近我玩了一个Linq to SQL,被我写数据访问层的速度所打动,决定花一些时间真正理解Linq to SQL或EF。。。或者两者都没有

    我只是想检查一下,这些技术中没有任何一个会让我的研究时间变得无用的重大缺陷。例如,性能很糟糕,对于简单的应用程序来说很酷,但只能让你走这么远

    更新:
    你能专注于EF VS L2S VS SPs而不是ORM VS SPs吗。我主要对EF VS L2S感兴趣。但是我也很想将它们与存储过程进行比较,因为我对纯SQl非常了解。

    LINQ to SQl是一项非常出色的技术,它使用起来非常简单,并且基本上可以生成非常好的后端查询。LINQtoEF本来打算取代它,但从历史上看,它的使用极其笨拙,生成的SQL也差得多。我不知道目前的情况,但微软承诺将L2S的所有优点都移植到L2EF中,所以现在可能更好了


    就我个人而言,我非常不喜欢ORM工具(详情请参见我的批评),因此我认为没有理由支持L2EF,因为L2S为我提供了数据访问层所需的一切。事实上,我甚至认为L2S特性,如手工制作的映射和继承建模,增加了完全不必要的复杂性。但那只是我。;-)

    存储过程:

    (+)

    • 极大的灵活性
    • 对SQL的完全控制
    • 可用的最高性能
    (-)

    • 需要SQL知识
    • 存储过程不受源代码控制
    • 在指定相同的表名和字段名时,大量的“重复您自己”。重命名DB实体并在某处丢失对其的某些引用后,很有可能中断应用程序
    • 缓慢发展
    ORM:

    (+)

    • 快速发展
    • 数据访问代码现在受源代码管理
    • 您与数据库中的更改隔离。如果发生这种情况,您只需要在一个位置更新模型/映射
    (-)

    • 表现可能更差
    • 对ORM生成的SQL没有或几乎没有控制(可能效率低下或更糟)。可能需要干预并用自定义存储过程替换它。这将使您的代码变得凌乱(一些LINQ在代码中,一些SQL在代码中,和/或DB在源代码控制之外)
    • 因为任何抽象都可能产生“高级”开发人员,他们不知道它在幕后是如何工作的

    一般的折衷是在拥有极大的灵活性和浪费大量时间之间,而不是在你能做的事情上受到限制,但很快就完成了


    这个问题没有一般性的答案。这是一场圣战。还取决于手头的项目和您的需求。选择最适合您的方法。

    您的问题基本上是O/RM与手工编写SQL

    看看其他一些O/RM解决方案,L2S并不是唯一的解决方案(NHibernate、ActiveRecord)

    针对具体问题:

  • 取决于O/RM解决方案的质量,L2S非常擅长生成SQL
  • 一旦您完成了流程,使用O/RM通常会快得多
  • 代码通常也更整洁,更易于维护
  • 直接SQL当然会给您带来更大的灵活性,但大多数O/RM可以完成除最复杂查询之外的所有查询
  • 总的来说,我建议使用O/RM,灵活性损失是可以忽略的

  • 首先,如果您要启动一个新项目,请使用实体框架(“EF”)—它现在生成的SQL要好得多(更像Linq to SQL),并且比Linq to SQL(“L2S”)更易于维护和更强大。关于.NET 4的发布,我认为LINQ-SQL是过时的技术。MS对不再继续L2S开发持开放态度

    1)性能

    这很难回答。对于大多数单实体操作(),您会发现这三种技术的性能几乎相当。您必须知道EF和LINQtoSQL是如何工作的,才能充分利用它们。对于轮询查询之类的大容量操作,您可能希望EF/L2S“编译”实体查询,这样框架就不必不断地重新生成SQL,或者您可能会遇到可伸缩性问题。(见编辑)

    对于更新大量数据的批量更新,原始SQL或存储过程的性能始终优于ORM解决方案,因为您不必通过连接将数据封送到ORM来执行更新

    2)发展速度

    在大多数情况下,当涉及到开发速度时,EF会将裸SQL/存储过程吹走。EF设计器可以在数据库发生更改时(根据请求)从数据库更新模型,这样就不会在目标代码和数据库代码之间遇到同步问题。我不考虑使用ORM的唯一时候是当你在做一个报告/仪表板类型的应用程序时,你没有做任何更新,或者当你创建一个应用程序只是在数据库上做原始数据维护操作。p> 3)整洁/可维护的代码

    不言而喻,EF胜过SQL/sprocs。因为您的关系是建模的,所以代码中的连接相对较少。对于大多数查询,实体之间的关系几乎是不言而喻的。没有什么比不得不离开更糟糕的了