我有以下類(過於簡化):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