Entity framework 当不确定LINQ to实体是否具有指定的导航属性时,如何在LINQ to实体中使用Include方法?

Entity framework 当不确定LINQ to实体是否具有指定的导航属性时,如何在LINQ to实体中使用Include方法?,entity-framework,linq-to-entities,ef-code-first,Entity Framework,Linq To Entities,Ef Code First,我给你举个例子: 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 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 { }
它会抛出一个异常,并显示以下消息:

指定的包含路径无效。EntityType“A”不存在 声明名为“D”的导航属性


如果只使用一个LINQ到实体查询,您将如何解决这个问题

using (var context = new MyContext())

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


}

它永远不会给出任何结果,因为类型“A”没有属性“D”,并且if条件将始终为false。即使它可以工作,我也希望查询结果包含“A”类型的所有实体和存在的所有派生类型(B和C)。
我希望查询结果包含“A”类型的所有实体和所有派生类型(B和C)
似乎您希望用这些派生类型加载A
DbSet A
始终返回对象类型。你在那里得不到任何B,C。但是您将获得A的所有对象。其中一些对象与B和C相关。但是您无法直接从A获得B或C。context.A.Where(A=>A是B)正是这样做的,但我希望自动获得所有导航属性
using (var context = new MyContext())

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


}