C# 在控制器中,如何在每个请求中只保留一次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

我的控制器需要两种类型的服务,并且都需要具有相同的dbcontext接口

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方法对我来说没有问题,所以我不认为这是一件坏事,但谢谢