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)
似乎您希望用这些派生类型加载ADbSet 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);
}