实体框架v4 - POCO与仅代码之间的区别是什么?

时间:2009-11-28 07:12:53

标签: .net entity-framework poco code-first

我的印象是

  • EF with POCO:允许您将自己的POCO映射到模型上的实体(.edmx)。
  • 仅限EF代码: edmx /模型设计器(即CSDL / SSDL / MSL(统称为EDMX)元数据)。仍然是POCO,但映射,关系,导航等都是手动编码(因此仅代码,描述)。

如果这两个概念的描述(或多或少)正确,为什么有人会用POCO做什么代码而不是EF?

两者都在做POCO,但是第二个人还需要手动进行映射吗?

5 个答案:

答案 0 :(得分:3)

  1. 如果您想手动编写映射而不必使用XML,那么代码就很棒。此外,edmx设计师在50个左右的模型之后变得笨拙,使用这种方式只是一种负担。
  2. 当您的映射XML中出现问题时,它真的是一个PITA,可以在xml中进行挖掘,以便进行所需的修复。如果您在某些情况下开始手动编辑xml,设计师也会中断。

    现在我不知道细节,但EF1中的设计器不支持所有可用的映射选项。 EF4设计师有一些改进(想到单向关系),但我不确定它是否具有与手动映射功能相同的功能。

答案 1 :(得分:3)

我唯一要补充的是jfar的答案是,只使用Code-only,你就不会拥有来创建映射。

映射可以在大多数情况下按惯例推断。

答案 2 :(得分:1)

关于视图预生成的观点很重要。我没有听说微软有意为代码提供预生成。如果有人知道不同请发帖。

我已经使用了400个表的代码,作为调查是否使用EF4或NHibernate的一部分,并且视图生成有80秒的初始延迟 - 与使用设计器时完全相同,但与设计师一起使用查看预生成是可能的,它将延迟降低到10秒。如果您不喜欢拆分您的模型并且您拥有超过75个表,请不要使用仅限代码。

答案 3 :(得分:0)

我认为Code-Only目前不允许您预生成视图,因此可能会产生性能成本。但是,这可能会在发布之前发生变化。

答案 4 :(得分:0)

其他未提及的是,在使用“仅代码”时,您将获得语法的完整编译时检查。如果您正在使用EDMX的可视化设计器,您将获得一些编译时检查,但它是有限的。对于较大的模型,EDMX非常不合适,手动编写CSDL,SSDL和MSL是使用XML映射管理超大型模型的唯一方法。如果手动管理映射,则不会进行任何编译时检查。

使用“仅代码”,您可以对任何大小的模型进行完整的编译时检查,即使您需要使用数百或数千个实体。它还会减少“混乱”,因为您的最终产品是所有已编译的程序集,而不是程序集和各种xml文件的混合。