我有以下类(过于简化):EF代码优先 - 预先加载和过滤子类属性(继承)
public class Person
{
public int ID { get; set; }
}
public class Content
{
public int ID { get; set; }
}
public class Image : Content
{
public bool Private { get; set; }
public Person Author { get; set; }
}
public class Tag
{
public int ID { get; set; }
public Content Content { get; set; }
public Person Person { get; set; }
}
我想获得的所有Tags
其中Content
是Image
和Image
不是Private
(同时热切地加载Image
的财产)。例如,试图做到这一点,但不起作用:
var tags = context.Tags
.Include("Content.Author")
.Include("Person")
.Where(t => !((Image)t.Content).Private);
我收到以下错误:
无法转换类型“内容”输入“图像”。 LINQ to Entities仅支持投射EDM基元或枚举类型。
并与Where
条款中删除:
一个指定的包含路径无效。 EntityType'Content'不声明名为'Author'的导航属性。
需要什么样的查询和/或模型模式更改才能完成此方法?
不是一个答案,但尝试使用您的渴望加载与Lambda包括。 添加using语句System.Data。实体 和您的包含应该是context.Tags.Include(t => t.Content.Author).Include(t => t.Person) – 2013-03-16 17:18:01
@Patrick我得到编译器错误尝试使用任何lambda使用EF的Include() 5.0。有什么我需要能够使用这些? – 2013-03-16 18:21:46
您是否尝试过右键单击您的项目,添加引用,然后在Assemblies菜单选择框架的弹出对话框中,搜索System.Data并从中包含它,看看是否有效。 - http://i.imgur.com/zr9kr70.png – 2013-03-16 18:24:36