如何在控制器中每个请求仅删除一个DbContext实例?

时间:2019-01-23 14:28:39

标签: 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, ISomeService some) 
        {
            _some = some;
            _unitOfWork = unitOfWork

        }

//这是我的配置

services.AddDbContext<MyContext>(x =>  
   {

    x.UseSqlServer(Configuration.GetConnectionString("coon"));

  });

2 个答案:

答案 0 :(得分:3)

From the documentation

  

实体框架上下文

     

实体框架上下文应添加到服务容器中   使用范围的生命周期。这是通过电话自动处理的   注册数据库上下文时将其添加到AddDbContext方法。   使用数据库上下文的服务也应使用范围   一生。

因此AddDbContext会将其添加为作用域生存期。

您需要确保将控制器/或其他使用它的地方也添加到DI中作为“范围”项。

范围内的生命周期服务每个请求创建一次。

答案 1 :(得分:0)

我发现Issuse的问题是我使用了由SaveChanges插入的AsyncSaveChanges,但是我的服务获得了同样的安装感激,谢谢大家:)!