我正在讨论如何使用Entity Framework创建通用MVC存储库的tutorial。我能够对特定的名称进行更改,以便它可以与我所使用的系统一起使用。从单独的教程中,我学习了如何创建接口并重写通用存储库类来实现接口。
测试效果很好。但是,我注意到虽然存储库类是一个“通用”类,但该类似乎被绑定到一个特定的数据库上下文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
}
答案 0 :(得分:2)
感谢来自@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>();
}