2016-01-08 3 views
2

Я бегу в этом вопросе, где я получаю следующее сообщение об ошибке:Асинхронный/Await Entity Framework ObjectContext расположен

A first chance exception of type 'System.ObjectDisposedException' occurred in EntityFramework.dll

Additional information: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

я получаю эту ошибку при попытке доступа к таблице с помощью EF 6. Я дал метод для async и ждать возвращаемого значения, но он все равно дает мне удаленную ошибку.

public async Task<List<Ticket>> GetAllOpenTwoTicketsAsync() { 

     using (AssetTrackingEntitiesObj _edmObj = new AssetTrackingEntitiesObj()) { 
      _edmObj.FullObjectContext.Connection.Open(); 
      return await _edmObj.Tickets 
       .Where(t => t.TicketStatusType.isOpenTicket) 
       .Include(t => t.AssetTickets) 
       .Select(t => t).ToListAsync(); 
     }  


    } 

здесь метод, который называет билеты

TicketsCollection = new ObservableCollection<Ticket>(await _ticketRepository.GetAllOpenTwoTicketsAsync()); 

Правильно ли я делать это? Каждый метод в моем репозитории использует инструкцию using, создает свой собственный objectcontext, открывает свое собственное соединение, а затем делает все, что ему нужно, правильно ли это для множественного асинхронного с EF6? Заранее спасибо.

ответ

1
  1. _edmObj.FullObjectContext.Connection.Open(); не требуется. Заявление об использовании заботится об открытии и удалении контекста. Это основная причина использовать их самостоятельно для открытия/закрытия/распоряжения ресурсами.

  2. .Select(t => t) совершенно не нужно. Просто позвонить ToListAsync() сделает трюк.

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

+0

The Selects не нужны, спасибо. В итоге мне пришлось использовать некоторые транзакции EF и полностью отключить ленивую загрузку. – user5660392