簡體   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