【发布时间】:2018-02-11 18:22:49
【问题描述】:
我希望在我的 asp.net core 2.0 应用程序中使用工作单元实现存储库模式。使用 .net 核心中使用的依赖注入 (DI) 原则执行此操作的示例并不多。我试图重写文档中的this example。我还尝试在可能的情况下添加异步操作。
现在的想法是,工作单元将它自己的 dbcontext 传递给每个正在使用的实体的 GenericRepository。这样可以确保您只使用一个 dbcontext,即使您处理两个实体也是如此。
在我的控制器中,我获取一些如下数据:
var model = new IndexViewModel
{
Companies = await _unitOfWork.CompanyRepository.GetAsync()
};
在我的工作单元中,dbcontext 是使用 DI 创建的。然后它为每个实体创建 GenericRepository 的新实例,同时将它的 dbcontext 传递给 genericrepository 的构造函数:
private ApplicationDbContext _context;
private GenericRepository<Company> companyRepository;
private GenericRepository<Person> personRepository;
public UnitOfWork(ApplicationDbContext context)
{
_context = context;
}
public GenericRepository<Company> CompanyRepository
{
get
{
if (this.companyRepository == null)
{
this.companyRepository = new GenericRepository<Company>(_context);
}
return companyRepository;
}
}
//repeat for Person
但我担心每次使用 GenericRepository 时依赖注入都会自动创建一个新的 dbcontext。
public class GenericRepository<TEntity> where TEntity : class
{
internal ApplicationDbContext _context;
internal DbSet<TEntity> dbSet;
public GenericRepository(ApplicationDbContext context)
{
_context = context;
dbSet = context.Set<TEntity>();
}
//...other methods
}
我担心这实际上会创建两个上下文。每个一个(如果有两个请求)?所以实际上 dbcontext 将被实例化 3 次,一次在 unitofwork 中,然后在每个存储库中实例化一次? Here is a link 到 github 上的应用程序。它正在工作,但我想了解它是如何工作的。感谢您的任何回答!
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-core