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