上下文部署到服务中

时间:2019-02-17 09:50:43

标签: .net-core entity-framework-core

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

  

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();
    }
}

服务在配置服务中的定义如下

services.AddScoped<OverbookingsManager>();

该服务的代码如下:

    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 


    }
}

当我在控制器上执行get请求时,它将调用方法DownloadAndUpdate(),该方法使用该服务。

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

我不明白问题所在,请您帮忙?

谢谢

1 个答案:

答案 0 :(得分:0)

问题无效:

public async void SendEmailsOverbookings()

用Task代替:

public async Task SendEmailsOverbookings()

有关一些解释,请查看documentation

  

对于事件处理程序以外的其他不返回值的方法,您可以   应该返回Task,因为返回的异步方法   迫不及待地想念。