工作单元模式不允许我在没有选项的情况下创建数据库上下文

Unit of work pattern not allowing me to create db context without options

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

HomeController(WarehouseDBContext _context)

我已经按照此处文档的建议创建了 unitOfWork Class https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application#creating-the-unit-of-work-class

但是我有点困惑。它期望这里的选项通常在控制器上处理。

我的UnitOfWorkclass

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);
    }
}

但是这里有人抱怨它期望我认为包含连接字符串的选项。我正在尝试将我的代码与 EF 分离,以便将来升级时更容易。我的 WareshouseDBContext 描述如下

如您所见,它正在等待选项。我应该从这里经过什么?

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;

我还需要做些什么来让它接受工作单元级别的上下文创建吗?

报错是

您不应手动创建 DbContext。为什么不在你的 UOW class 中注入 DbContext?然后 DI 将管理数据库上下文的生命周期。老实说,我不喜欢在已经实现 UOW 模式的 EF 周围添加 UOW 包装器。

我建议您观看这两个讲座,它将永远改变您构建应用程序的方式:

https://www.youtube.com/watch?v=5OtUm1BLmG0&ab_channel=NDCConferences

https://www.youtube.com/watch?v=5kOzZz2vj2o&t=3s&ab_channel=NDCConferences

另一个关于 EF Core 细节的精彩演讲:https://www.youtube.com/watch?v=zySHbwl5IeU&ab_channel=NDCConferences

如果你想坚持使用存储库模式,请检查 Ardalis 存储库并提供一个清晰的示例:https://github.com/ardalis/CleanArchitecture

我同意 Ardalis 存储库是一个很棒的 tutorial/example,如果有人想要一个精简版解决方案来实现 EF 5/EF 6 中的存储库和工作单元模式。

你可以看看下面的,我测试过它可以在 EF Core 6 中运行

https://pradeepl.com/blog/repository-and-unit-of-work-pattern-asp-net-core-3-1/