System.InvalidOperationException:未关闭连接。连接的当前状态是连接

时间:2018-03-09 21:51:16

标签: c# entity-framework-6

我注意到在其他人编写的某些代码中抛出此异常并尝试修复它。我们正在使用ASP.NET MVC和Entity Framework 6.0。我在其他地方寻找但没有发现任何相关的东西,因为我的情况下的异常是由竞争条件(而不是未清理的对象)创建的。

背景:

  • 一个js函数正在迭代一个数组,并为每个项目对控制器进行ajax调用。
  • 控制器调用一个服务,最终调用使用实体框架+ linq的存储库,它看起来像这样:

    public IList<int> GetData(IList<int> ids)
    {
        var query = from widget in _context.Widgets
                        .Where(x => x.SourceId == 1 &&
                            ids.Contains(x.ID))
                    from widgetSourceType in widget.WidgetSource
                        .Where(x => x.WidgetSourceType.Name == "foo")
                    select widget.ID;
    
        return query.ToList();
    }
    

它在query.ToList()行上轰炸,我相信这是在实际执行查询时。我很清楚,ajax调用是同时触发多个操作,第二个是在第一次完成之前尝试访问同一个连接。但我不确定如何修复。有没有人有这方面的经验?

1 个答案:

答案 0 :(得分:1)

我认为问题出在_Context中。尝试使用using语句来清除任何打开的连接。

using (_context conn =
    new YourDBContext('connectionString'))
{
    conn.Open();
    //your query
    conn.Close();
}

或者您可以使用async个查询,然后使用await来获取结果。