Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 工作单元模式不允许我在没有选项的情况下创建db上下文_Asp.net_Model View Controller_Entity Framework Core_Unit Of Work - Fatal编程技术网

Asp.net 工作单元模式不允许我在没有选项的情况下创建db上下文

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

我正在使用ef core,并尝试将存储库模式作为最佳实践的一部分来实现。但是我对上下文有点困惑,通常我会在

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;