C# 在控制器中,如何在每个请求中只保留一次DbContext?
我的控制器需要两种类型的服务,并且都需要具有相同的dbcontext接口C# 在控制器中,如何在每个请求中只保留一次DbContext?,c#,asp.net-core,dependency-injection,entity-framework-core,dbcontext,C#,Asp.net Core,Dependency Injection,Entity Framework Core,Dbcontext,我的控制器需要两种类型的服务,并且都需要具有相同的dbcontext接口 public class MyController : Controller { protected readonly ISomeService _some; protected reaonly IUnitOfWork _unitOfWork public MyController(IUnitOfWork unitOfWork, ISomeServic
public class MyController : Controller
{
protected readonly ISomeService _some;
protected reaonly IUnitOfWork _unitOfWork
public MyController(IUnitOfWork unitOfWork, ISomeService some)
{
_some = some;
_unitOfWork = unitOfWork
}
//这是我的配置
services.AddDbContext<MyContext>(x =>
{
x.UseSqlServer(Configuration.GetConnectionString("coon"));
});
services.AddDbContext(x=>
{
x、 使用SQLServer(Configuration.GetConnectionString(“coon”);
});
:
实体框架上下文
实体框架上下文应添加到服务容器中
使用作用域生存期。这是通过电话自动处理的
注册数据库上下文时,将添加到AddDbContext方法。
使用数据库上下文的服务也应该使用作用域
一生
因此AddDbContext会将其添加为作用域生存期
您需要确保控制器/或使用此功能的其他位置也作为作用域项添加到DI中
每个请求都会创建一次作用域生存期服务。我发现问题所在我的问题是我使用了AsyncSaveChanges而不是SaveChanges,但我的服务得到了相同的安装谢谢大家:) 您是如何将服务添加到DI容器的?默认情况下,DbContext作为作用域服务添加。请发布您当前的DI配置。为什么您需要实例相同?这两个服务在哪个作用域中向容器注册?(如何)验证这两个服务中的DbContext实例不是同一个实例?services.AddScoped(typeof(IRepository),typeof(存储库));services.AddScoped();services.AddScoped(typeof(ISomeService)、typeof(SomeService));某些服务需要存储库和Unitofwork存储库需要DBContext您应该使用
saveChangesSync
SaveChanges
只阻塞saveChangesSync
,阻塞是不好的。很可能您没有正确地等待异步调用。是的,但在我正在做的MVC项目中,我不需要ync方法对我来说没有问题,所以我不认为这是一件坏事,但谢谢