为什么我应该使用Entity Framework而不是Linq2SQL

Ref*_*din 9 .net entity-framework linq-to-sql

要明确的是,我并没有要求进行并列比较,这已经被问到Ad Nauseum在这里.我也不是在问Linq2Sql是不是死了,因为我不在乎.我要问的是......

我正在为非营利组织构建内部应用程序.我是员工中唯一的开发人员.我们总是使用SQL Server作为我们的数据库后端.我也设计和构建了数据库.我已经成功使用过几次L2S了.

考虑到所有这些因素,有人能给我一个令人信服的理由来使用EF代替L2S吗?

我本周末去了Code Camp,经过一个小时的EF演示,所有这些我都可以在L2S中完成,我问了同样的问题.发言人的回答是,"L2S已经死了......"很好!不!(见这里)

我理解EF是我们将来要使用的MS(见这里),它提供了更多的自定义选项.我无法弄清楚的是,在这种环境中,如果有任何应该或对我来说是重要的.

我们在这里遇到的一个特殊问题是我继承了基于4个不同SQL数据库构建的核心应用程序.L2S在这方面遇到了很大的困难,但当我问上述发言人是否EF会在这方面帮助我时,他说"不!"

Rob*_*vey 8

使用EF,您可以在类对象和数据库表之间获得映射层(即实体).如果您需要这种灵活性,或者更喜欢域驱动的设计模型(而不是表驱动设计),EF可能值得考虑.Linq to SQL几乎是一个从表到表的映射器.

  • 正确的是,如果您的设计是基于表的,并且您对将表直接映射到对象感到满意,那么继续使用Linq to SQL应该会感觉很好.如果您需要EF进行映射工作,或者连接到非SQL Server的另一个数据库,您始终可以向解决方案添加EF数据上下文. (2认同)

Mar*_*ark 7

没有使用Linq2SQL的一大理由是它有一个重大的implcit设计缺陷:

使用DataContext的推荐最佳实践是它用于短暂的"工作单元"样式.很棒,除了它是一个中等昂贵的对象,一直在创建和处置.

当您想要反序列化或重新创建对象(可能来自提交的网页)然后更新现有记录时,会出现这种障碍.Linq-to-sql提供的Attach方法只接受以下三种情况:

  1. 您在所有表上实现时间戳.
  2. 您重新选择要更改的实体,然后更改并提交.
  3. 你神奇地碰巧仍然拥有对象的原始版本.

第一种情况需要数据库更改,这对某些环境来说是不可接受的.第二种情况是右下方效率低下 - 为什么要检索已有的数据?第三种情况是不现实的 - 无状态网络应用程序通常不会保留历史信息.

这里的要点是...... EF4.0允许您将对象重新附加到ObjectContext并将其标记为已添加或新,并且上下文将相应地生成正确的INSERT/UPDATE语句.