[英]EF Multiple foreign keys only 1 required
我有一個實體,它為許多不同的實體定義屬性。
例如。
class user{
ICollection<PropertyEntity> properties {get;set;}
}
class company{
ICollection<PropertyEntity> properties {get;set;}
}
當我從用戶或公司中刪除PropertyEntity時。
myUser.properties.Remove(someProperty);
PropertyEntity不會被刪除,只是將其外鍵設置為null。
我知道我可以只使用[Key]批注定義外鍵。 但是大概這將需要兩個密鑰而不是兩個密鑰?
我如何獲得EF來構建該關系,以便用戶或公司可以具有許多PropertyEntity。 但是,如果PropertyEntity沒有用戶或公司,則會將其刪除?
如果該關系是可選的,則無法定義該關系,以便從導航集合中刪除子項也將其從數據庫中刪除。
您必須調用DbSet<T>.Remove
。為孩子DbSet<T>.Remove
...
myUser.properties.Remove(someProperty);
if (!someProperty.CompanyId.HasValue)
context.PropertyEntities.Remove(someProperty);
...(這也會自動從集合中刪除該子項),或者您可以在提交更改之前嘗試刪除覆蓋的SaveChanges
中的“孤立”子項:
public override int SaveChanges()
{
PropertyEntities.Local
.Where(p => !p.UserId.HasValue && !p.CompanyId.HasValue)
.ToList()
.ForEach(p => PropertyEntities.Remove(p));
return base.SaveChanges();
}
Arthur Vickers的博客上對此方法進行了更詳細的說明。
確實只有在需要這種關系的情況下,才可能建立標識關系 (這將支持在從導航集合中刪除該子項時將其從數據庫中刪除),因此這不是您的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.