是否可以通过接口(interface)查询 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 的 Entity Framework 中获取列表,然后将它们转换为具体类型以获取额外数据。
现在,我知道可以使用 nhibernate (http://stackoverflow.com/questions/3612816/nhibernate-query-all-objects-implementing-an-interface) 来实现,而且我知道它所做的只是创建一堆 SQL 查询,但都在一次数据库往返中。我也不太关心发出查询时的其他数据(我不想添加 wheres 和 order by 等)我只需要按公共(public)字段(Id 和 Name)进行过滤。
谢谢
最佳答案
Entity Framework 不支持接口(interface)查询(EF根本不支持接口(interface))。它仅支持映射实体继承。要使其工作,您必须将 IBaseBlock
接口(interface)更改为 BaseBlock
抽象类和映射继承(可能是 TPC)。使用继承还有其他一些缺陷。例如任何实体的主键在整个继承树中必须是唯一的。
作为旁注,EF 目前不支持单次往返中的多个查询,因此在查询继承树时,它会创建一个带有联合的大查询。
关于c# - 获取可在其具体类型中类型转换的相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512583/