工作单元模式不允许我在没有选项的情况下创建数据库上下文
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
但是我有点困惑。它期望这里的选项通常在控制器上处理。
我的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);
}
}
但是这里有人抱怨它期望我认为包含连接字符串的选项。我正在尝试将我的代码与 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/
我正在使用 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
但是我有点困惑。它期望这里的选项通常在控制器上处理。
我的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);
}
}
但是这里有人抱怨它期望我认为包含连接字符串的选项。我正在尝试将我的代码与 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/