EF - 提取每个层次结构的特定类型表的所有记录

时间:2016-10-21 13:22:14

标签: c# entity-framework table-per-hierarchy

在我的EF上下文中,我有一个类的层次结构,使用每个层次结构方法的表进行管理。

因此,我有一个基本的抽象类和一堆派生自它的类:

var Webget = new HtmlWeb();
var result = File.ReadLines("c:\\test.txt")
    .Select(line => Webget.Load(line).DocumentNode.SelectSingleNode("//*[@id='title-article']").InnerHtml));

memoEdit1.Text = string.Join(Environment.NewLine, result);

这些类配置如下:

public abstract class BaseClass
{
    [Required]
    public int Id {get; set;}

    ...
}

public abstract class ExtendedClass1 : BaseClass
{

    ...

}

public abstract class ExtendedClass2 : BaseClass
{

    ...

}

要访问数据库,我使用的是从通用存储库派生的存储库:

public class ExtendedClass1Configuration : 
    EntityTypeConfiguration<ExtendedClass1>
{
    ...

    this.Map(m => m.Requires("Discriminator").HasValue("ExtendedClass1"));
}

我想在我的存储库中添加一个方法,它将提取特定子类型的所有类(例如,类型为public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity: BaseClass { protected DbContext context; DbSet<TEntity> GetSet() { return this.context.Set<TEntity>(); } public virtual void Add(TEntity entity) { this.GetSet().Add(entity); } ... } public class BaseClassRepository : Repository<BaseClass>, IBaseClassRepository { ... } 的所有记录)。

我尝试了一些方法,但没有成功:

ExtendedClass1

这给了我以下编译错误:

  

类型或命名空间名称&#39; type&#39;无法找到

我现在尝试的另一种方法是:

public IEnumerable<BaseClass> GetByType(Type type) {
    return context.Set<BaseClass>().OfType<type>();
}

我做错了什么?我该如何实施呢?

1 个答案:

答案 0 :(得分:2)

public IEnumerable<BaseClass> GetByType(Type type) 
{
    return context.Set<BaseClass>().OfType<type>();
}

不正确,请使用

public IEnumerable<BaseClass> GetByType<T>() 
{
    return context.Set<BaseClass>().OfType<T>();
}

Typeparams ftw。