[英]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.