已释放Async/Await实体框架ObjectContext
本文关键字:实体 框架 ObjectContext Await 释放 Async | 更新日期: 2023-09-27 18:29:29
我遇到了这个问题,我得到了以下错误:
EntityFramework.dll 中首次出现类型为"System.ObjectDisposedException"的异常
附加信息:ObjectContext实例已被释放,不能再用于需要连接的操作。
我在尝试使用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进行多异步的正确方式吗?提前谢谢。
-
不需要
_edmObj.FullObjectContext.Connection.Open();
。using语句负责打开和处理上下文。这是在自己打开/关闭/处理资源时使用它们的主要原因。 -
CCD_ 2是完全不必要的。只要调用
ToListAsync()
就可以了。
代码的其余部分看起来不错,所以它可能是导致错误的第一个语句。另一个原因可能是您试图访问未包含的导航属性,当您的上下文被释放时,延迟加载不起作用。