Asp.net 工作单元模式不允许我在没有选项的情况下创建db上下文
我正在使用ef core,并尝试将存储库模式作为最佳实践的一部分来实现。但是我对上下文有点困惑,通常我会在Asp.net 工作单元模式不允许我在没有选项的情况下创建db上下文,asp.net,model-view-controller,entity-framework-core,unit-of-work,Asp.net,Model View Controller,Entity Framework Core,Unit Of Work,我正在使用ef core,并尝试将存储库模式作为最佳实践的一部分来实现。但是我对上下文有点困惑,通常我会在 HomeController(WarehouseDBContext _context) 我已经按照这里的文档建议创建了我的unitOfWork类 然而我有点困惑。这里需要的是通常在控制器上处理的选项 我的UnitOfWorkclass public class WarehouseUnitOfWork : IDisposable { private WarehouseDBCont
HomeController(WarehouseDBContext _context)
我已经按照这里的文档建议创建了我的unitOfWork
类
然而我有点困惑。这里需要的是通常在控制器上处理的选项
我的UnitOfWork
class
public class WarehouseUnitOfWork : IDisposable
{
private WarehouseDBContext context = new WarehouseDBContext();
private WarehouseRepository<StockItem> stockRepository;
public WarehouseRepository<StockItem> StockRepoistry
{
get
{
if (this.stockRepository == null)
{
this.stockRepository = new WarehouseRepository<StockItem>(context);
}
return stockRepository;
}
}
public void Save()
{
context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
我还需要做些什么,让它接受在工作单元级别创建上下文
给出的错误是
您不应该手动创建DbContext。为什么不在UOW类中注入DbContext呢?然后DI将管理db上下文的生命周期。老实说,我不喜欢在已经实现UOW模式的EF周围添加UOW包装器 我建议您观看这两个讲座,它将永远改变您构建应用程序的方式: 另一个关于EF核心细节的精彩演讲:
如果您想坚持使用Repository模式,请用一个明确的例子检查Ardalis Repository:我只是觉得在企业应用程序中,工作单元模式是执行业务级应用程序的更标准的方法。我不是说它错了,只是一种偏好。企业应用程序的问题是过度工程化。回答您的问题时,应该让DI创建dbcontext,而不是手动创建。:)是的,我读到了,看到了DI是一条路要走。我已经创建了一个服务层
namespace WareHouseDal.Dal {
public class WarehouseDBContext : IdentityDbContext<ApplicationUser> {
public WarehouseDBContext(DbContextOptions<WarehouseDBContext> options)
: base(options) {
}
public DbSet<WarehouseCrm> Warehouse { get; set; }
public DbSet<Company> Companies { get; set; }
}
private readonly WarehouseDBContext _context;