繁体   English   中英

如何使“通用” C#存储库在其构造函数中接受上下文

[英]How to make a “generic” C# repository accept a context in its constructor

我正在阅读有关如何使用Entity Framework创建通用MVC存储库的教程 我能够进行特定的名称更改,因此可以与现有系统配合使用。 在单独的教程中,我学习了如何创建接口并重写通用存储库类以实现该接口。

该测试效果很好。 但是,我注意到,尽管存储库类是“通用”类,但该类似乎绑定到一个特定的数据库上下文SkillJournalContext 有没有一种方法可以用通用类替换SkillJournalContext ,以便可以在项目中的任何其他数据库上下文中使用相同的存储库? (我在项目中还有另外两个上下文,每个上下文指向单独的数据库)。

我这样做是为了避免为其他两个数据库上下文重新键入相同的代码。 我使用“ MVC存储库”和“数据库上下文参数”的变体在网上搜索,并获得了与我使用的相同的教程。

是否需要将存储库绑定到一个特定的数据库上下文,或者可以像我希望的那样使其成为通用库?

public class GenericRepositorySkill<TEntity> : IGenericRepository<TEntity>
                 where TEntity : class
{
    internal SkillJournalContext context;
    internal DbSet<TEntity> dbSet;

    public GenericRepositorySkill(SkillJournalContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    // .... and so on
}

感谢@Mati Cicero的启发,我用SkillJournalContext替换了DbContext 这成功了。

我将internal类型更改为DbContext类型,并将参数更改为DbContext类型。 没有编译错误,浏览器测试按预期工作。

既然这不依赖于特定的数据库上下文,我就可以相应地重命名存储库类和构造函数。

    internal DbContext context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(DbContext _context)
    {
        this.context = _context;
        this.dbSet = context.Set<TEntity>();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM