我正在使用ef core,并且尝试将存储库模式作为最佳实践的一部分来实施。但是我通常对上下文有点困惑,我会在和注入中创建上下文
HomeController(WarehouseDBContext _context)
我已经unitOfWork
按照此处https://docs.microsoft.com/zh-CN/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4的文档的建议创建了我的班级/在asp-net-mvc应用程序中实现存储库和工作单元模式#创建工作单元类
但是我有点困惑。此处期望的选项通常在控制器上处理。
我的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=NDC会议
关于EF核心详细信息的另一场精彩演讲:https : //www.youtube.com/watch?v=zySHbwl5IeU&ab_channel=NDCConferences
如果要坚持使用Repository模式,请使用一个清晰的示例检查Ardalis存储库:https : //github.com/ardalis/CleanArchitecture
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句