我注意到在其他人编写的某些代码中抛出此异常并尝试修复它。我们正在使用ASP.NET MVC和Entity Framework 6.0。我在其他地方寻找但没有发现任何相关的东西,因为我的情况下的异常是由竞争条件(而不是未清理的对象)创建的。
背景:
控制器调用一个服务,最终调用使用实体框架+ 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调用是同时触发多个操作,第二个是在第一次完成之前尝试访问同一个连接。但我不确定如何修复。有没有人有这方面的经验?
答案 0 :(得分:1)
我认为问题出在_Context中。尝试使用using
语句来清除任何打开的连接。
using (_context conn =
new YourDBContext('connectionString'))
{
conn.Open();
//your query
conn.Close();
}
或者您可以使用async
个查询,然后使用await
来获取结果。