我遇到了这个问题,我收到以下错误:
EntityFramework.dll中出现'System.ObjectDisposedException'类型的第一次机会异常
其他信息:ObjectContext实例已被处理,不能再用于需要连接的操作。
我在尝试使用EF 6访问表时遇到错误。我已将方法设置为异步并等待返回值,但它仍然让我处理错误。
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进行多次异步的正确方式吗?提前谢谢。
答案 0 :(得分:1)
_edmObj.FullObjectContext.Connection.Open();
不是必需的。 using语句负责打开和处理上下文。这是使用它们而不是自己打开/关闭/处理资源的主要原因。
.Select(t => t)
完全没必要。只需拨打ToListAsync()
即可。
其余代码看起来很好,所以它可能是导致错误的第一个语句。另一个原因可能是您尝试访问未包含的导航属性,延迟加载在您的上下文处理时无法正常工作。