[英]Prevent Entity Framework from setting foreign key to NULL
我們的數據庫具有三個實體: Person
, Company
和PhoneCall
。
Person
描述一個人。 Company
描述公司。 PhoneCall
描述了打給Person
或Company
的電話的詳細信息。
public class Person
{
public int Id { get; set;}
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class Company
{
public int Id { get; set;}
public string Name { get; set; }
public string VatNumber { get; set; }
}
public class PhoneCall
{
public int Id { get; set;}
public string Description { get; set;}
public int Duration { get; set;}
public int? PersonId { get; set; }
public Person Person { get; set; }
public int? CompanyId { get; set; }
public Company Company { get; set; }
}
刪除Person
或Company
時,我發現Entity Framework出現某些不良行為。
如果刪除Person
,則實體框架將更新所有關聯的PhoneCall
條目並將PersonId
設置為NULL。
dbContext.Entry(person).State = EntityState.Deleted;
dbContext.SaveChanges();
我不希望實體框架在所有關聯的PhoneCall
條目上都將PersonId
設置為null,而是對實體框架拋出某種異常,以使我知道無法刪除Person
因為有相關實體引用了Person
。
問題似乎是實體框架不尊重PhoneCall.PersonId
和PhoneCall.CompanyId
外鍵,因為它們都是(必須)可以為空。
我顯然可以在刪除之前執行自己的檢查,如下所示:
if (phoneCallDbSet.Where(ph => ph.Person == personToDelete).Any())
throw new InvalidOperationException("Cannot delete person with associated calls");
...但是我的偏好是設置某種限制,以防止Entity Framework首先將外鍵設置為NULL,這樣,如果開發人員忘記執行此檢查,則最終不會PhoneCall
表中的PhoneCall
條目PhoneCall
鏈接。
這可能嗎?
沒有!! 沒有對代碼進行顯式檢查,就無法實現所需的功能。
如果將屬性設置為可為空,則告訴框架您可以根據需要將其設置為null。 那么為什么將其設置為null時會顯示任何錯誤?
您可以使該屬性不可為空,或者在代碼中進行顯式檢查以對其進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.