gpt4 book ai didi

entity-framework - Code First : Independent associations vs. 外键关联?

转载 作者:行者123 更新时间:2023-12-03 04:50:18 26 4
gpt4 key购买 nike

每次我开始做一个新项目并设计我的 POCO 时,我都会与自己进行一次心理辩论。我看过许多教程/代码示例似乎有利于外键关联:

外键关联

public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}

相对于独立协会:

独立协会

public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}

我过去曾使用过 NHibernate,并使用独立关联,这不仅感觉更面向对象,而且(通过延迟加载)具有使我能够访问整个 Customer 对象而不仅仅是其 ID 的优点。例如,这使我能够检索 Order 实例,然后执行 Order.Customer.FirstName 操作,而无需显式执行联接,这非常方便。

回顾一下,我的问题是:

  1. 有什么明显的缺点吗?使用独立协会?还有...
  2. 如果没有,什么这就是使用外键关联的原因吗?

最佳答案

如果你想充分利用 ORM,你一定会使用实体引用:

public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}

一旦您从具有 FK 的数据库生成实体模型,它将始终生成实体引用。如果您不想使用它们,则必须手动修改 EDMX 文件并添加代表 FK 的属性。至少在 Entity Framework v1 中是这样的,其中只允许独立关联。

Entity Framework v4 提供了一种称为外键关联的新型关联。独立关联和外键关联最明显的区别是在 Order 类中:

public class Order
{
public int ID { get; set; }
public int CustomerId { get; set; } // <-- Customer ID
public Customer Customer { get; set; } // <-- Customer object
...
}

正如您所看到的,您同时拥有 FK 属性和实体引用。两种类型的关联之间还有更多区别:

独立协会

  • 它在ObjectStateManager中表示为单独的对象。它有自己的EntityState!
  • 建立关联时,您始终需要关联两端的实体
  • 此关联的映射方式与实体相同。

外键关联

  • 它在 ObjectStateManager 中不表示为单独的对象。因此,您必须遵守一些特殊规则。
  • 建立关联时,不需要关联的两端。拥有子实体和父实体的 PK 就足够了,但 PK 值必须是唯一的。因此,在使用外键关联时,您还必须为关系中使用的新生成的实体分配临时唯一 ID。
  • 此关联未映射,而是定义了引用约束。

如果您想使用外键关联,则必须在实体数据模型向导中勾选在模型中包含外键列

编辑:

我发现这两种类型的关联之间的区别并不是很为人所知,所以I wrote a short article对此进行了更多详细信息和我自己的看法。

关于entity-framework - Code First : Independent associations vs. 外键关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com