【问题标题】:Generic Repository in DB first Entity Framework ApproachDB第一实体框架方法中的通用存储库
【发布时间】:2017-05-16 06:14:45
【问题描述】:

我正在编写一个详细的通用存储库 here 。我正在使用 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
}

在我的例子中,intellisense 没有将 Set 显示为函数,而是列出了所有实体。为了使其通用,我不需要命名实体而是通用方法。

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

【问题讨论】:

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

标签: c# entity-framework repository


【解决方案1】:

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

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

对于我正在做的事情是否有更好的方法或者这样可以吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多