C# DB-first实体框架方法中的通用存储库

C# DB-first实体框架方法中的通用存储库,c#,entity-framework,repository,C#,Entity Framework,Repository,我正在编写一个详细的通用存储库。我使用DB-First方法生成EF模型 public class GenericRepository<TEntity> where TEntity : class { internal SchoolContext context; internal DbSet<TEntity> dbSet; public GenericRepository(SchoolContext context) {

我正在编写一个详细的通用存储库。我使用DB-First方法生成EF模型

public class GenericRepository<TEntity> where TEntity : class
{
    internal SchoolContext context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(SchoolContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }
    //Removed for brevity reason
}
公共类通用存储,其中tenty:class
{
学校内部语境;
内部数据库集;
公共一般报告(学校背景)
{
this.context=上下文;
this.dbSet=context.Set();
}
//为了简洁起见,删除了
}
在我的例子中,intellisense并没有将Set显示为函数,而是列出了所有实体。要使其通用,我不需要命名实体,只需要通用方法


如何将其分配给泛型实体,或者是否有其他更好的方法来编写泛型存储库?

我将存储库层分离到另一个类库项目中,以将适当的N层分层添加到我的代码堆栈中,而新项目没有对EnityFramework的引用。在向EnityFramework添加引用后,它工作了

我不知道这是否是一个好的设计,因为它将我的存储库与实体框架紧密耦合,在单元测试时,我必须模拟DataContext和DBSet


是否有更好的方法来处理我正在做的事情,或者这样可以吗?

如果
SchoolContext
源于
DbContext
,它应该有
Set()
方法。你现在的代码编译吗?我感觉你走错方向了。包装上下文和数据库集的泛型repo根本没有意义。@haim770它实际上是从DBContext派生的。@如果您能给出解释性的答案,它会很好吗?我有数百个实体,编写100个IRepository非常耗时,而大多数实体都要做相同类型的工作。当您将存储库中的上下文类型从
SchoolContext
更改为
DbContext
时,是否获得了
Set()
函数?