2012-03-15 91 views
3

我有一個模型,它看起來是這樣的:實體框架4.3 - 多態查詢用預先加載

public abstract class Parent 
{ 
    public int Id { get; set; } 
} 

public class Child11 : Parent 
{} 

public class Child2 : Parent 
{ 
    public virtual Dependency Dependency { get; set; } 
} 

public class Dependency 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Child2> Children { get; set; } 
} 

我試圖找出誰寫加載所有的家長和渴望負荷依賴LINQ查詢在所有Child2上。這甚至有可能嗎?我已經嘗試過所有我能想到但沒有成功的Linq聲明組合。

回答

3

如果您只是需要加載CHILD2你可以使用:

var child2 = context.Parents 
        .OfType<Child2>() 
        .Include(c => c.Dependency) 
        .ToList(); 

如果您還需要加載所有其他派生類型,你很可能會需要使用第二查詢或嘗試做一些工會。 EF中的多態查詢在加載時不能很好地工作。

+0

我該怎麼做一個工會?我試過context.Child2s.Include(c => c.Dependency).Union (context.Child1s),它給了我一個錯誤,說它無法在Parent上找到依賴關係。 – 2012-03-15 11:47:30

+0

您可能最有可能在應用程序中使用兩個單獨的查詢和聯合結果,因爲Include正在更改結果集的形狀,並且它不能與另一個形狀聯合。 – 2012-03-15 12:04:37