繁体   English   中英

实体框架:在实体中包含外键 ID?

[英]Entity Framework: include foreign key ID in entity?

我在很多地方都读到过,应该(通常)在实体中包含外键 id,因为它是一个数据库详细信息,事实上,EF 通过向相应的表添加一个 EntityName_Id 列来很好地管理它。

public class Order
{
    public decimal Total { get; set; }
    public int? InvoiceId { get; set; }
    public Invoice Invoice { get; set; }
}

public class Invoice
{
    public ICollection<Order> Orders { get; set; }
}

在此示例中, OrderInvoice具有可选关系。 在显示有关Order信息时,我想知道它是否有Invoice
问题是,如果我的实体中没有“InvoiceId”属性,我必须检查整个相关实体以检查它是否存在,而在我的实体中拥有该属性将允许我检查它是否为空,从实体已经加载的意义上说,这是“免费的”。

这是在实体中具有外键 Id 属性的唯一用途吗? 我在这里错过了什么吗?

您可以查看实体框架文档以查看问题的答案: https : //msdn.microsoft.com/en-US/data/jj713564.aspx

它说:

通过外键关联,您可以使用任一方法来更改、创建或修改关系。 对于独立关联,您不能使用外键属性。

文章中提供的用例:

  1. 更新外键关系——如果您同时更新导航属性和外键并引用不同的对象,这可能会导致问题。

    通过为外键属性分配一个新值,如下例所示。

    course.DepartmentID = newCourse.DepartmentID;

  2. 删除外键关系。 这仅在没有与 FK 属性相关联的对象时有效,即处于“已添加”状态。

    以下代码通过将外键设置为 null 来删除关系。 请注意,外键属性必须可以为空。

    course.DepartmentID = null;

除了这些情况之外,您可以使用它来检查您的引用是否不为空/空,而无需像您说的那样真正延迟加载相关实体:

var isNull = course.DepartmentID == null;

我相信差不多就是这样。 在我看来,使用 FK 属性的好处太小,不能依赖它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM