【发布时间】:2016-09-20 19:08:11
【问题描述】:
我正在使用 EF6 并尝试获取对象的整个结构。问题是我正在使用继承。
假设我有这个课程。
DbContext
DbSet<A> A { get; set; }
示例类
public class A
{
public string Id { get; set; }
public IList<Base> Bases { get; set; }
}
public abstract class Base
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class Base1 : Base
{
public SomeClass SomeClass { get; set; }
}
public class Base2 : Base1
{
}
public class Base3 : Base1
{
public SomeOtherClass SomeOtherClass { get; set; }
}
我得到的错误是:
The Include path expression must refer to a navigation property defined on the type.
Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.
为什么它不适用于以下内容?
public IEnumerable<A> GetAll(string id)
{
return _ctx.A
.Include(x => x.Bases.OfType<Base1>().Select(y=>y.SomeClass))
.Where(x => x.Id.Equals(id)).ToList();
}
新示例
public IEnumerable<A> GetAll(string id)
{
var lists = _dbContext.A.Where(x => x.Id == id);
lists.SelectMany(a => a.Bases).OfType<Base1>().Include(e=>e.SomeClass).Load();
lists.SelectMany(b => b.Bases).OfType<Base3>().Include(e => e.SomeOtherClass).Load();
return lists;
}
编辑:添加了一个似乎可行的新示例。
【问题讨论】:
-
你试过使用
Include("SomeOtherClass")吗? -
Someclass 是另一个实体。我还没有尝试过 SomeOtherClass,因为 SomeClass 还不起作用
-
这说明你试过
Include("SomeClass")还是不行? -
是的,我收到了我在帖子中写的错误:(
-
我认为您遇到了 TPH(以及一般的 EF 继承)的限制之一。
标签: c# entity-framework entity-framework-6