我的印象是

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

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

两者都在进行 POCO,但第二个有额外的负担,还必须手动进行映射?

有帮助吗?

解决方案

  1. 如果您想手动编写映射而不必费力地通过 XML,那么仅使用代码就非常有用。而且 edmx 设计器在 50 个左右的模型之后会变得笨重,使用这种方式只是一种负担。

当映射 XML 内部出现问题时,它实际上是一个 PITA,可以在 xml 中进行挖掘以进行所需的修复。如果您在某些情况下开始手动编辑 xml,设计器也会中断。

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

  1. 是的。

其他提示

我要在 jfar 的答案中添加的唯一一点是,使用 Code-Only 你不需要 创建映射。

大多数时候可以通过约定推断映射。

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

我对 400 个表使用了仅代码,作为关于是否使用 EF4 还是 NHibernate 的调查的一部分,并且视图生成有 80 秒的初始延迟 - 与使用设计器时完全相同,但使用设计器视图预先生成是可能的,这将延迟缩短至 10 秒。如果您不喜欢拆分模型并且您有超过 75 个表,请不要仅使用代码。

我认为仅代码目前不允许您预先生成视图,因此可能会产生性能成本。不过,这可能会在发布前发生变化。

还有一点没有提到的是,当使用仅代码时,您可以对语法进行完整的编译时检查。如果您将可视化设计器与 EDMX 一起使用,您会得到一些编译时检查,但它是有限的。对于较大的模型,EDMX 变得极其笨拙,手动编写 CSDL、SSDL 和 MSL 是使用 XML 映射管理超大型模型的唯一合适方法。如果您手动管理映射,则不会进行任何编译时检查。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top