簡體   English   中英

當不存在顯式關系時,使用實體框架請求父子對象集合

[英]Use Entity Framework to request parent-child object collection when no explicit relationship exists

我有2個類,請參見下文,它們是POCO類,我們使用它們來訪問數據庫,我們使用代碼優先方法,並使用ApplicationEntityConfiguration顯式配置實體和DB表之間的所有映射。

 public class Group
{
    public string Code { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Item> Items { get; set; }
}

public class Item
{
    public string Code { get; set; }
    public string Name { get; set; }
    public virtual Group ParentGroup { get; set; }
}

組和子級之間的關系不明確。 沒有外鍵。 從邏輯上講,關系是由代碼定義的,組應包含所有具有與父組相同的代碼開頭的代碼的項目

Context.Items.Where(x => x.Code.StartsWith(parentGroup.Code));

我需要返回調用方方法數據庫中所有組的集合,其中每個組都有所有子項。 請求數據時,我可以請求Context.Groups,並且對於每個Group,都可以使用Where來請求Item。 我在數據庫中有50多個組和1000多個項目,因此這種手動方法將導致對數據庫的查詢超過50個,並且會對性能產生影響

更好的解決方案是請求一個集合中的所有Group,然后再請求另一個集合中的所有Item,然后在內存中存儲所有這些數據時,為每個組填充一個Items集合……那么這不會對數據庫造成很大的影響。

因此,雖然我總體上可以實現目標,但我想知道是否存在一個更優雅的解決方案,在該解決方案中,我們可以聲明性地告訴Enity Framework使用表達式.Where(x => x.Code.StartsWith (parentGroup.Code)),然后在聲明后,開發人員可以在希望將組和項目一起加載時使用Include(),也可以依賴於懶惰加載來在訪問子項時加載它們

沒有比第二種方法更好的方法了。 這是因為實體框架只能加載與父級PK具有外鍵關系的集合。 尚不支持與唯一索引的關聯。

同樣,您所指的過程“ 關系修正”僅在映射關聯時才有效。 但是在您的情況下,它無法映射,因此EF無法填充集合本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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