c# - 什么是独立协会和外键协会?

标签 c# entity-framework-4 entity-framework-5

<分区>

Possible Duplicate:
Code First: Independent associations vs. Foreign key associations?

在 EF 4 或 EF 5 Code First 中,什么是“独立关联”,什么是“外键关联”,如所用 on MSDNForeign Key vs. Independent Relationships - is there improvement with Entity Framework 5? (重点添加):

2.4.1 Using Foreign Key Associations to reduce view generation cost

We have seen a number of cases where switching the associations in the model from Independent Associations to Foreign Key Associations dramatically improved the time spent in view generation.

那么——现在我知道该用哪个了。要是我知道它们是什么以及人们会如何接受它就好了!那么我的问题是,您将如何定义这些术语?每个流利/注释/约定调用什么?

最佳答案

我对为什么要使用独立或外键关联的看法:

独立协会

优点:

  • 这是进入面向对象世界的正确方式。在面向对象的世界中,我们在聚合中使用引用,而不是一些魔术键。

缺点:

  • 对于纯 POCO,您不知道主体关系是否真的为 NULL 或只是未加载,因为在这两种情况下您的引用都是空的。您必须要求上下文区分这两个空值。这不是重型 EntityObject 基础实体的问题,其中主要实体的每个导航属性都与另一个后缀为 Reference 的属性配对,提供有关关系的一些额外详细信息。
  • EF 管理独立关联的方法非常复杂,尤其是在附加分离的对象图时。每个独立的关联都有自己的状态,并且永远不会处于 Modified 状态。每次修改总是包括将旧关系设置为删除并创建新关系作为添加 - 当您尝试使用它时,这真是一团糟。
  • 据报道,独立关联会显着减慢 EF 初始化期间(或 View 预生成期间)的 View 生成速度。
  • 在您只需要绑定(bind)外键的数据绑定(bind)场景中,独立关联可能更难使用。

外键关联

优点:

  • 简单。关键属性易于管理,它们解决了独立关联的所有问题 - 外部关联无状态、直接数据绑定(bind)、关系存在时立即可见(键不为空)等。

缺点:

  • 它们在概念上是错误的,在 EF 中提供它们是从对象世界到关系世界的一大退步。我仍然相信正确的解决方案是改进或改变处理独立关联的方式,即使它可能导致 EFv1 和 EFv4 之间发生巨大的破坏性变化。我也不喜欢目前的情况,我们有两种行为完全不同的协会。实体上应该只有一种具有明确定义的行为和可选外键属性的类型。

这种差异仅对一对多关联很重要,因为一对一始终是外键关联,而多对多始终是独立关联。

关于c# - 什么是独立协会和外键协会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606948/

相关文章:

c# - Entity Framework 错误为“不允许新事务,因为 session 中还有其他线程正在运行

c# TCP/IP 服务器和客户端

c# - 我正在尝试使用 SQL 语句中下拉菜单中的 selectedItem 来填充 C# asp.net 中的文本框

c# - 使用 NHaml 在 HtmlHelper 中缺少扩展方法

entity-framework-4 - Entity Framework 代码优先 - 将具有另一个类的 List<> 的类映射到多个表?

c# - EF 4 中的标识列

c# - 在 visual studio online 上找不到 Microsoft.SqlServer.Types 的版本 10 或更高版本

sql-server - 我可以使用 Entity Framework 4 中的 SELECT 等效项执行 INSERT

entity-framework-5 - 有没有办法在调用 EdmxWriter.WriteEdmx 时忽略某些实体属性

LINQKit:在 LINQ to Entities 中嵌套 ExpandableQuery