.net core 上下文被释放到服务中

.net core 上下文被释放到服务中,.net-core,entity-framework-core,.net Core,Entity Framework Core,尝试将上下文用于自定义服务时出现以下错误: System.ObjectDisposedException:'无法访问已处置的对象。此错误的一个常见原因是处理通过依赖项注入解析的上下文,然后在应用程序的其他位置尝试使用相同的上下文实例。如果对上下文调用Dispose()或包装上下文,可能会发生这种情况 我的代码由一个控制器和一个服务组成。 我的控制器的(简化)代码为: public class IcsController : Controller { public string curre

尝试将上下文用于自定义服务时出现以下错误:

System.ObjectDisposedException:'无法访问已处置的对象。此错误的一个常见原因是处理通过依赖项注入解析的上下文,然后在应用程序的其他位置尝试使用相同的上下文实例。如果对上下文调用Dispose()或包装上下文,可能会发生这种情况

我的代码由一个控制器和一个服务组成。 我的控制器的(简化)代码为:

public class IcsController : Controller
{
    public string current_Directory = System.IO.Directory.GetCurrentDirectory();
    //Importation du context (BDD)
    private readonly Sync4All_AngularContext _context;
    private readonly UserManager<User> _userManager;
    public readonly OverbookingsManager _overbookingsManager;

    private IIcsService _icsService;

    public IcsController(Sync4All_AngularContext context, UserManager<User> userManager, IIcsService icsService, OverbookingsManager overbookingsManager)
    {
        _context = context;
        _userManager = userManager;
        _icsService = icsService;
        _overbookingsManager = overbookingsManager;
    }

    //---------------------------------Telechargement et Update de tous les ICALS-----------------------------------
    [HttpGet]
    public ActionResult DownloadAndUpdate()
    {
        _overbookingsManager.SendEmailsOverbookings();

        return Ok();
    }
}
公共类IcsController:控制器
{
公共字符串current_Directory=System.IO.Directory.GetCurrentDirectory();
//上下文输入(BDD)
私有只读Sync4All\u AngularContext\u context;
私有只读用户管理器_UserManager;
公共只读OverbookingsManager(U OverbookingsManager);
私人IIcsService(ICSU icsService);
公共IcsController(Sync4All_AngularContext、UserManager UserManager、IIcsService icsService、OverbookingsManager OverbookingsManager)
{
_上下文=上下文;
_userManager=userManager;
_icsService=icsService;
_overbookingsManager=overbookingsManager;
}
//---------------------------------使用ICALS的远程充电和更新-----------------------------------
[HttpGet]
公共操作结果下载和更新()
{
_overbookingsManager.SendEmailsOverbookings();
返回Ok();
}
}
服务的定义如下所示:配置服务

services.AddScoped<OverbookingsManager>();
services.addScope();
服务代码如下:

    public class OverbookingsManager
{
    private readonly Sync4All_AngularContext _context;
    public OverbookingsManager(Sync4All_AngularContext context)
    {
        _context = context;
    }

    public async void SendEmailsOverbookings()
    {
        List<Overbookings> overbookinsList =  await _context.Overbookings.Where(m => DateTime.Compare(m.DtEmailSent, DateTime.Today.AddDays(-7)) < 0).ToListAsync(); //This is where i got the error of context disposed
        //blabla rest of my code 


    }
}
公共类超售管理器
{
私有只读Sync4All\u AngularContext\u context;
公共超售管理器(Sync4All\u AngularContext)
{
_上下文=上下文;
}
公共异步void sendmailsoverbookings()
{
List overbookinsList=await _context.Overbookings.Where(m=>DateTime.Compare(m.DtEmailSent,DateTime.todays.AddDays(-7))<0.ToListSync();//这就是我处理上下文错误的地方
//布拉布拉我的代码的其余部分
}
}
当我在控制器上执行get请求时,它调用methode DownloadAndUpdate(),该方法使用该服务

我的控制器和服务的其他方法使用_context,但我从不使用_context.dispose()

我不明白这个问题,你能帮忙吗

谢谢

问题是无效的:

public async void SendEmailsOverbookings()
将其替换为任务:

public async Task SendEmailsOverbookings()
有关一些解释,请参阅:

对于不返回值的事件处理程序以外的方法,可以 应该返回一个任务,因为 空虚是不能等待的

问题在于:

public async void SendEmailsOverbookings()
将其替换为任务:

public async Task SendEmailsOverbookings()
有关一些解释,请参阅:

对于不返回值的事件处理程序以外的方法,可以 应该返回一个任务,因为 空虚是不能等待的


谢谢,这就是问题所在。调用函数时也需要等待。谢谢,这就是问题所在。调用函数时也需要等待。