2013-05-05 41 views
0

這裏有我的實​​體:包括基底部件似乎並沒有在實體框架工作5

public abstract class ResourceBase 
{ 
    [Key] 
    int Id { get; set; } 

    [ForeignKey("Resource")] 
    public Guid ResourceId { get; set; } 
    public virtual Resource Resource { get; set; } 
} 
public class Resource 
{ 
    [Key] 
    public Guid Id { get; set; } 

    public string Type { get; set; } 
} 
public class Message : ResourceBase 
{ 
    [MaxLength(300)] 
    public string Text { get; set; } 
} 

然後我的查詢是這樣的:

var msgs = messages.Where(x=>x.Id == someRangeOfIds).Include(m=>m.Resource).Select(x => new 
           { 
            message = x, 
            replyCount = msgs.Count(msg => msg.Id = magicNumber) 
           }); 

我與運行此禁用代理創建,並且結果是所有消息,但所有的資源屬性均爲NULL。我檢查了數據庫和資源與匹配Guids在那裏。

我大幅簡化了我的真實生活場景以供說明,但我認爲你會發現你可以用這個重現問題。

回答

0

實體框架5很好地處理繼承屬性(通過展開繼承樹並將所有屬性包括爲實體表的列)。

此查詢不起作用的原因是由於include之後的投影。不幸的是,包含聲明僅在返回實體時才起作用。雖然,我確實看到提到一個棘手的解決方案,並且在指定了返回數據的形狀之後涉及調用「include」...如果有人有關於此的更多信息,請回復。

我想出的解決方案只是改寫查詢,所以我在一個查詢中獲得所有消息,然後在另一個數據庫訪問中獲取所有答覆數量的另一個查詢。

2次往返時它真的應該只有1.