Контекст расположен в сервисе - PullRequest
0 голосов
/ 17 февраля 2019

Возникла следующая ошибка, когда я пытаюсь использовать свой контекст в пользовательском сервисе:

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 голосов
/ 17 февраля 2019

Проблема недействительна:

public async void SendEmailsOverbookings()

Замените это на Задание:

public async Task SendEmailsOverbookings()

. Для некоторых объяснений взгляните на документацию :

Для методов, отличных от обработчиков событий, которые не возвращают значение, вы должны вместо этого вернуть Task, потому что асинхронный метод, который возвращает void, не может ожидаться.

...