[英]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; }
}
在此示例中, Order
與Invoice
具有可選關系。 在顯示有關Order
信息時,我想知道它是否有Invoice
。
問題是,如果我的實體中沒有“InvoiceId”屬性,我必須檢查整個相關實體以檢查它是否存在,而在我的實體中擁有該屬性將允許我檢查它是否為空,從實體已經加載的意義上說,這是“免費的”。
這是在實體中具有外鍵 Id 屬性的唯一用途嗎? 我在這里錯過了什么嗎?
您可以查看實體框架文檔以查看問題的答案: https : //msdn.microsoft.com/en-US/data/jj713564.aspx
它說:
通過外鍵關聯,您可以使用任一方法來更改、創建或修改關系。 對於獨立關聯,您不能使用外鍵屬性。
文章中提供的用例:
更新外鍵關系——如果您同時更新導航屬性和外鍵並引用不同的對象,這可能會導致問題。
通過為外鍵屬性分配一個新值,如下例所示。
course.DepartmentID = newCourse.DepartmentID;
刪除外鍵關系。 這僅在沒有與 FK 屬性相關聯的對象時有效,即處於“已添加”狀態。
以下代碼通過將外鍵設置為 null 來刪除關系。 請注意,外鍵屬性必須可以為空。
course.DepartmentID = null;
除了這些情況之外,您可以使用它來檢查您的引用是否不為空/空,而無需像您說的那樣真正延遲加載相關實體:
var isNull = course.DepartmentID == null;
我相信差不多就是這樣。 在我看來,使用 FK 屬性的好處太小,不能依賴它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.