我的印象是
- EF 与 POCO:允许您将自己的 POCO 映射到模型 (.edmx) 上的实体。
- EF Code-Only:没有edmx/模型设计器(即 CSDL/SSDL/MSL(统称为 EDMX)元数据)。仍然是 POCO,但映射、关系、导航等都是手动编码的(因此只有代码,描述)。
如果对这两个概念的描述(或多或少)是正确的,那么为什么有人会用 POCO 做一个 Code-Only 而不是 EF 呢?
两者都在做 POCO,但第二个有额外的负担,必须手动进行映射?
我的印象是
如果对这两个概念的描述(或多或少)是正确的,那么为什么有人会用 POCO 做一个 Code-Only 而不是 EF 呢?
两者都在做 POCO,但第二个有额外的负担,必须手动进行映射?
当您的映射 XML 中出现问题时,它实际上是一个 PITA,可以在 xml 中挖掘以进行所需的修复。如果您在某些情况下开始手动编辑 xml,设计器也会中断。
现在我不知道细节,但 EF1 中的设计器并不支持所有可用的映射选项。EF4 设计器有一些改进(想到一种方式的关系),但我不确定它是否具有与手动映射相同的功能。
我要添加到 jfar 的答案中的唯一一件事是,使用 Code-Only 您不必创建映射。
大多数情况下,映射可以通过约定来推断。
关于视图预生成的观点很重要。我还没有听说微软打算为纯代码提供预生成。如果有人知道不同,请发布。
作为调查是否使用 EF4 或 NHibernate 的一部分,我对 400 个表使用了纯代码,并且视图生成有 80 秒的初始延迟 - 与使用设计器时完全相同,但使用设计器视图预生成是可能的,这将延迟降低到 10 秒。如果您不喜欢拆分模型并且您有超过 75 个表,请不要仅使用代码。
我不认为 Code-Only 目前允许您预先生成视图,因此可能会有性能成本。不过,这可能会在发布之前改变。
还没有提到的其他一点是,当使用“仅代码”时,您可以在编译时检查您的语法。如果您使用带有 EDMX 的可视化设计器,您会得到一些编译时检查,但它是有限的。对于较大的模型,EDMX 变得极其笨拙,手动编写 CSDL、SSDL 和 MSL 是管理具有 XML 映射的超大型模型的唯一不错的方法。如果您手动管理映射,则不会进行任何编译时检查。
使用纯代码,您可以对任何大小的模型进行完整的编译时检查,即使您需要处理成百上千个实体。它还可以减少“混乱”,因为您的最终产品都是已编译的程序集,而不是程序集和各种 xml 文件的混合。