已释放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进行多异步的正确方式吗?提前谢谢。

已释放Async/Await实体框架ObjectContext

  1. 不需要_edmObj.FullObjectContext.Connection.Open();。using语句负责打开和处理上下文。这是在自己打开/关闭/处理资源时使用它们的主要原因。

  2. CCD_ 2是完全不必要的。只要调用ToListAsync()就可以了。

代码的其余部分看起来不错,所以它可能是导致错误的第一个语句。另一个原因可能是您试图访问未包含的导航属性,当您的上下文被释放时,延迟加载不起作用。