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

标签 c# .net entity-framework

是否可以通过接口(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/

相关文章:

c# - 闭包中的 Foreach 变量。为什么这些片段的结果不同?

c# - 如何实现像 StringCollection 这样的默认方法和一些类呢?

javascript - 上传图像 Web Api

c# - 调整旋转方面的正确方法

c# - 将 Windows MP3 解码器与 Un4Seen Bass.NET 结合使用

c# - 如何正确杀死Linux C#

entity-framework - 首先使用 Entity Framework 6.1 代码持久化和检索序列化实体属性

c# - WPF/C# 中异步任务和 RoutedEventHandler 的问题

database - 如何更新实体数据模型?

c# - 使用 LINQ 分页而不排序