Async / Await Entity Framework ObjectContext处理

时间:2016-01-08 17:42:49

标签: c# .net wpf entity-framework asynchronous

我遇到了这个问题,我收到以下错误:

  

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

1 个答案:

答案 0 :(得分:1)

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

  2. .Select(t => t)完全没必要。只需拨打ToListAsync()即可。

  3. 其余代码看起来很好,所以它可能是导致错误的第一个语句。另一个原因可能是您尝试访问未包含的导航属性,延迟加载在您的上下文处理时无法正常工作。