【发布时间】:2013-03-16 17:13:10
【问题描述】:
我有以下课程(过于简化):
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“内容”未声明名为“作者”的导航属性。
我需要什么样的查询和/或模型架构更改才能完成这种方法?
【问题讨论】:
-
不是答案,但请尝试将您的急切加载与 Lambda 包含一起使用。添加 using 语句 System.Data.Entity 并且您的 Include 应该是 context.Tags.Include(t => t.Content.Author).Include(t => t.Person)
-
@Patrick 我在尝试使用 EF 5.0 使用任何 lambda Include() 时遇到编译器错误。我还需要其他什么东西才能使用它们吗?
-
您是否尝试过右键单击您的项目,添加引用,然后在“程序集”菜单选择框架的弹出对话框中,搜索 System.Data 并从那里包含它,看看是否有效。 - i.imgur.com/zr9kr70.png
-
@PatrickMagee 我能够让 lambda 工作,作者:
using System.Data.Entity;不幸的是,我遇到了与以前相同的错误:指定的包含路径无效。 EntityType“内容”未声明名为“作者”的导航属性。这也不能解决Where子句问题。 -
它可能是在尝试投射到 system.drawing.image 吗?
标签: c# entity-framework inheritance ef-code-first