2013-07-18 33 views
0

我給你一個CF例如:如何在LINQ To Entity中使用Include方法時不確定它具有指定的導航屬性?

public class MyContext : DbContext 
{ 
    public DbSet<A> A { get; set; } 
} 

public class A 
{ 
    public int E { set; get; } 
} 

public class B : A 
{ 
    public int F { set; get; } 
} 

public class C : A 
{ 
    public int G { set; get; } 
    public virtual D D { set; get; } 
} 

public class D { } 

和查詢是這樣的:

using (var context = new MyContext()) 
    { 
     var queryResult = context.A.Include("D").Select(a => a); 
    } 

,並拋出這個消息的異常:

一個指定的包含路徑無效。 EntityType'A'不會 聲明名稱爲'D'的導航屬性。

如何解決這個問題只有一個LINQ To Entity查詢

回答

0

這裏是一個變通

using (var context = new MyContext()) 

{ 
    var typeA=typeOf(A); 
    var queryResult ;  
    if(typeA.GetProperty("D")!=null) 
     queryResult = context.A.Include("D").Select(a => a); 


} 
+0

它永遠不會給任何結果,因爲類型「A」不具有財產「d」和如果條件永遠是假的。即使它可以工作,我也希望查詢的結果包含所有類型爲「A」的實體以及存在的所有派生類型(B和C)。 – jannagy02

+0

'我希望查詢的結果包含所有類型爲'A'的實體以及所有派生類型(B和C)'看起來像你期望用派生類型加載A. 'DbSet A'總是返回A的對象類型。你不會在那裏得到任何B,C。但是你會得到A的所有對象。其中一些與B和C有關,但是你不能直接從A得到B或C. –

相關問題