如何解决工作单元模式不允许我创建没有选项的数据库上下文
我正在使用ef core,并且尝试将存储库模式作为最佳实践的一部分进行实施。但是我通常对上下文有些困惑,通常会在和注入中创建上下文
HomeController(WarehouseDBContext _context)
我已按照此处的文档建议创建了unitOfWork
类
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
但是我有点困惑。期望这里有通常在控制器上处理的选项。
我的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;
我需要做其他事情以允许它接受工作单位级别的上下文创建。
给出错误是
解决方法
您不应该手动创建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 举报,一经查实,本站将立刻删除。