1

我的印象是

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

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

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

4

5 回答 5

3
  1. 如果您想手动编写映射而不必费力地通过 XML,那么仅代码是很棒的。此外,edmx 设计师在 50 多个模型之后变得笨拙,使用这种方式只是一种负担。

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

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

  1. 是的。
于 2009-11-28T23:00:58.960 回答
3

我要添加到 jfar 的答案中的唯一一件事是,使用 Code-Only 您不必创建映射。

大多数情况下,映射可以通过约定来推断。

于 2009-11-29T17:01:57.250 回答
1

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

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

于 2010-12-15T22:41:19.910 回答
0

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

于 2009-11-30T18:32:38.407 回答
0

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

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

于 2010-07-11T01:45:38.093 回答