微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决工作单元模式不允许我创建没有选项的数据库上下文

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

HomeController(WarehouseDBContext _context)

我已按照此处的文档建议创建了unitOfWorkhttps://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

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

我的UnitOfWork

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;

我需要做其他事情以允许它接受工作单位级别的上下文创建。

给出错误

enter image description here

解决方法

您不应该手动创建DbContext。为什么不在您的UOW类中注入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

如果您要坚持使用Repository模式,请使用清晰的示例检查Ardalis存储库:https://github.com/ardalis/CleanArchitecture

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。