C# 在Asp.Net内核中初始化DBContext

C# 在Asp.Net内核中初始化DBContext,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我想在我的项目中使用存储库和工作单元。 但是在ASP.NET MVC中,当我们想使用DBContext时,就可以使用此代码 MyDbContext db=new MyDbContext(); 但在ASP.NET内核中,编写此代码时需要一个参数 因为在DbContext类中使用此代码 public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } 公共MyDbContext(DbContex

我想在我的项目中使用存储库和工作单元。 但是在ASP.NET MVC中,当我们想使用DBContext时,就可以使用此代码

MyDbContext db=new MyDbContext();
但在ASP.NET内核中,编写此代码时需要一个参数 因为在
DbContext
类中使用此代码

public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
公共MyDbContext(DbContextOptions选项):基(选项){ 错误:
问题出在哪里?

公共MyDbContext(DbContextOptions)
public MyDbContext(DbContextOptions<MyDbContext> options)
MyDbContext
类中没有空构造函数,所以应该在构造函数中传递参数
DbContextOptions

例如,您可以看到它->

公共MyDbContext(DbContextOptions)
MyDbContext
类中没有空构造函数,所以应该在构造函数中传递参数
DbContextOptions


例如,您可以看到它->

您不应该实例化DbContext,应该将其作为存储库的构造函数参数进行请求。然后,IOC容器将在运行时提供DbContext。这确保了您可以在给定的ASP.NET web请求中使用相同的DbContext,这将防止您可能遇到的大量问题

您可以在此处看到通用存储库的示例:


在ASP.NET应用程序中,通常不需要单独的工作单元(但有时需要)。这是因为您的请求应该非常小,您应该能够在单个控制器或服务中完成大部分工作,然后只需通过存储库进行保存。这并不是说您永远不需要UoW,而是它比厚客户端场景(例如windows应用程序或服务)中的UoW更不必要。

您不应该实例化DbContext,应该将其作为存储库的构造函数参数进行请求。然后,IOC容器将在运行时提供DbContext。这确保了您可以在给定的ASP.NET web请求中使用相同的DbContext,这将防止您可能遇到的大量问题

您可以在此处看到通用存储库的示例:


在ASP.NET应用程序中,通常不需要单独的工作单元(但有时需要)。这是因为您的请求应该非常小,您应该能够在单个控制器或服务中完成大部分工作,然后只需通过存储库进行保存。这并不是说你永远不需要UoW,而是它比厚客户端场景(例如windows应用程序或服务)中的UoW更不必要。

你可以在你的类UnitOfWork中尝试

private MyDBContext _context;

public UnitOfWork(MyDBContext context)
{
      _context = context;
}
在控制器中:

private UnitOfWork _unitOfWork;

public MoviesController(MyDBContext context)
{
      _unitOfWork = new UnitOfWork(context);
}

你可以试试:在你的班上

private MyDBContext _context;

public UnitOfWork(MyDBContext context)
{
      _context = context;
}
在控制器中:

private UnitOfWork _unitOfWork;

public MoviesController(MyDBContext context)
{
      _unitOfWork = new UnitOfWork(context);
}

您可以像这样初始化数据库上下文:

var optionBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionBuilder.UseSqlServer("Server=localhost;...");
var context = new MyDbContext(optionBuilder.Options);

您可以像这样初始化数据库上下文:

var optionBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionBuilder.UseSqlServer("Server=localhost;...");
var context = new MyDbContext(optionBuilder.Options);

可能重复的可能重复的可能重复的您将如何初始化用于单元测试的DBcontext或其他类型的非ASP.NET应用程序?您将如何初始化用于单元测试的DBcontext或其他类型的非ASP.NET应用程序?我已经详细解释了代码和其他选项。我已经解释了代码和其他选项详细的选项。