簡體   English   中英

EF僅需多個外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM