2011-12-14 40 views
2

是否有可能通過接口查詢EF並獲取可以在其具體類型中拋出的數據?獲取相關實體可以在其具體類型中拋出

比方說,我有:

public interface IBaseBlock 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
} 

public class ContentBlock : IBaseBlock 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Content { get; set; } 
} 

public class VideoBlock : IBaseBlock 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    string string VideoUrl { get; set; } 
} 

所以,我希望能夠得到基於IBaseBlock從實體框架的列表,然後將它們轉換成自己的形而下的類型,以獲得額外的數據。

現在,我知道它可以用nhibernate來做到這一點,我知道它所做的一切就是使用nhibernate(http://stackoverflow.com/questions/3612816/nhibernate-query-all-objects-implementing-an-interface)創建一堆SQL查詢,但全部在一個數據庫中往返。在查詢發佈時我也不太關心額外的數據(我不希望能夠添加wheres和order by等)。我只需要通過常用字段(Id和Name)進行過濾。

謝謝

回答

1

實體框架不支持通過接口查詢(EF根本不支持接口)。它僅支持映射的實體繼承。要使其工作,您必須將您的IBaseBlock接口更改爲BaseBlock抽象類和映射繼承(可能是TPC)。使用繼承還有其他一些缺陷。例如,任何實體的主鍵在整個繼承樹中必須是唯一的。

作爲一個附註,EF目前不支持單向往返內的多個查詢,所以當查詢繼承樹時,它會創建一個帶聯合的大查詢。

相關問題