获取在其具体类型中可转换的相关实体

时间:2011-12-14 22:24:51

标签: c# .net entity-framework

是否可以通过接口查询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的实体框架中获取一个列表,然后将它们转换为concret类型以获取其他数据。

现在,我知道可以使用nhibernate(http://stackoverflow.com/questions/3612816/nhibernate-query-all-objects-implementing-an-interface)来完成它,我知道它所做的只是创建一堆SQL查询,但所有在一个数据库中往返。在发出查询时我也不太关心其他数据(我不想添加wheres和order by等)我只需要按公共字段(Id和Name)进行过滤。 / p>

由于

1 个答案:

答案 0 :(得分:1)

实体框架不支持按接口查询(EF根本不支持接口)。它仅支持映射实体继承。要使其工作,您必须将IBaseBlock接口更改为BaseBlock抽象类和映射继承(可能是TPC)。使用继承还有一些其他缺陷。例如,任何实体的主键在整个继承树中必须是唯一的。

作为附注,EF目前不支持单个往返中的多个查询,因此在查询继承树时,它会创建一个带有联合的大查询。