c# - 异步/等待 Entity Framework ObjectContext 处置

标签 c# .net wpf entity-framework asynchronous

我遇到了以下错误:

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 访问表时遇到该错误。我已将该方法设置为异步并等待返回值,但它仍然给我处理错误。

 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. _edmObj.FullObjectContext.Connection.Open();。 using 语句负责打开和处理上下文。这是使用它们而不是自己打开/关闭/处置资源的主要原因。

  2. .Select(t => t) 是完全没有必要的。只需调用 ToListAsync() 即可。

您的其余代码看起来没问题,因此它可能是导致错误的第一条语句。另一个原因可能是您尝试访问未包含的导航属性,延迟加载在处理上下文时不起作用。

关于c# - 异步/等待 Entity Framework ObjectContext 处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682974/

相关文章:

c# - 从 Func 返回 Func

c# - LINQ Group 嵌套列表重构数据

c# - 如何删除 CaSTLe 3.0 中 Contribute ComponentModel 构造中的所有属性注入(inject)?

.net - 我是否正确实现了 MVP/演示模型 UI 模式?

c# - 在 WPF 中嵌入 Unity3D 应用程序 *而不会*占用整个窗口

c# - 将 Json.Net 添加到 Unity3D 项目

c# - 读取值时是否应该锁定资源?

c# - 在应用程序设置中保存字典并在启动时加载它

wpf - 您可以通过 WPF 样式将数据绑定(bind)到 CornerRadius 吗?

c# - 如何确定 .NET CORE DLL 是否在 Web 服务器/主机或控制台应用程序中运行