【问题标题】:Entity Framework 4 vs LINQ to SQL, for small or medium-size apps, working with SQL ServerEntity Framework 4 vs LINQ to SQL,适用于中小型应用程序,与 SQL Server 一起使用
【发布时间】:2011-05-02 09:14:35
【问题描述】:

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

Dump Linq-To-Sql now that Entity Framework 4.0 has been released?

Is Entity Framework worth moving to for a new small app?

现在,6 个月后,大概人们与 EF4 进行了更多的交互,所以我很好奇新的意见,尤其是在考虑仅使用 SQL Server 时。

我经常使用 LINQ to SQL,只玩过一点 EF4。我不介意加入并学习更多 EF4,但我不相信如果我的应用程序只与 SQL Server 对话,那么额外的复杂性值得。

那么,如果您对两者都有一定的经验,并且您今天要启动一个新的中小型应用程序,使用 SQL Server 后端,您会选择哪一个?

当然,为什么……

【问题讨论】:

    标签: sql-server linq-to-sql entity-framework-4


    【解决方案1】:

    这取决于... :)

    如果你不需要EF添加的任何额外功能,L2S一般是:

    • 更容易上手和使用,
    • 更直接地将 Linq 查询转换为 TSQL,并支持将更普通的 .net 方法转换为 TSQL,而 L2E 则依赖于“特殊”方法进行日期/时间比较等操作,
    • 并且由于表和实体类之间的直接 1:1 映射,运行时开销更少。

    EF 添加了更多功能,例如对其他 RDBMS 的支持和比普通 1:1 更复杂的映射、对几种不同类型的实体继承的支持等。这需要付出一定的代价:

    • 运行时开销高于 L2S,
    • 针对 EF 编写 linq 查询更有可能遇到由于使用不受支持的 CLR 方法或需要使用 L2E 的“special methods”而无法转换为 TSQL 的表达式,并且
    • 由于双层(存储模型和概念模型)以及它们之间的映射,与 L2S 模型相比,了解 EF 模型可能需要更多时间。在 xml 编辑器中手动调整模型文件并不罕见。

    简而言之:

    1. 如果您的应用程序足够简单,您可以 只需要支持 SQL Server,并且 您的数据库架构/数据模型是干净的 足够了,所以你不需要做更多 高级映射然后 L2S 是一个伟大的 选择。虽然不太可能 MSFT 将添加任何新的大功能 对它来说,这并不是必须的。 它按原样工作得很好并解决了 它应该解决的问题。许多应用和网站(包括这个)在 L2S 上运行良好。
    2. 如果您需要支持其他数据库 比 SQL Server,或者如果你的数据库 架构与对象不匹配 你想要的模型,或者你需要其他的 EF 提供的“更大”功能然后是您 应该使用 EF。

    【讨论】:

      【解决方案2】:

      我工作的公司是一家 $2.5B 到 $3.0B 的太阳能制造公司。我们将 L2S 用于我们所有的下一代制造应用程序。它并非没有缺点,但我们发现它速度快(与许多人的想法相反)、灵活且易于使用。我们没有遗憾。它做我们需要它做的一切。

      【讨论】:

        【解决方案3】:

        休眠。或 BLToolkit 用于特殊情况。 Linq2Sql 和 EntityFraemwork 仍然落后几代。

        【讨论】:

        • 为什么对 TomTom 投了反对票? Nhibernate 是 L2S 的有效替代方案,而且确实更成熟。
        • @Crap - 我不是反对者之一,但我怀疑他们可能认为他的回答离题了,因为我问的是在 Microsoft ORM 之间做出选择。
        【解决方案4】:

        在我看来,LINQ To SQL 的未来有点不明朗。我个人会选择 Entity Framework,因为它提供了最大的灵活性,而且它似乎是微软未来发展的重点。我一直在使用 Entity Framework,虽然它确实有一些怪癖,但我大部分时间都对它感到满意。

        【讨论】:

          【解决方案5】:

          几乎在任何情况下我都会选择实体框架。最大的缺点是,一旦你上线,几乎没有办法调整/改进你的模型,而不会炸毁东西并重新生成。那和 EF 可以做任何你可以用 l2s 做的事情,同时拥有更好的工具等等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-29
            • 1970-01-01
            • 2015-12-12
            • 1970-01-01
            • 2011-04-27
            相关资源
            最近更新 更多