已经有一个开放的DataReader

时间:2012-06-18 12:13:15

标签: sql-server entity-framework

我的cshtml中有一些代码:

@model IEnumerable<Floor>
@{
    var floors = Model
}

我在这一行中有错误:

@foreach(在floor_l.ShopFloors中使用var shopfloor)

我可以在模型分配后使用.ToList()。

可能是错误的原因是什么?谁面对过?

偶尔会出现此错误。

3 个答案:

答案 0 :(得分:1)

每个数据库连接一次只能支持一个数据读取器。您的Modelfoor_l使用相同的连接,因此您只能同时阅读其中一个。

添加.ToList()会将数据读取器中的所有记录读入列表,然后关闭数据读取器。这使得连接可以被下一个数据读取器使用。

答案 1 :(得分:1)

请注意延迟加载。如果启用了该功能,例如,如果您在循环中执行某些操作,则最终会出现此错误。

解决这个问题的一种方法是,如果你不想关闭延迟加载(并且必须记住再次打开它,如果你需要它)是使用预先加载,你可以通过添加您的查询的Include()语句。例如,如果您有一个名为Contact的实体,并且对Address上的Contact个实体集合的引用,并且您希望获得Addresses Contacts您正在查询,在LINQ查询中使用它

.Include("Addresses")

这将通过生成的查询为每个加载的Addresses加载Contact。尽管因为可能会遇到性能问题,但请谨慎使用Include()每个要使用预先加载的查询。

答案 2 :(得分:0)

connectionString中的

"MultipleActiveResultSets=True"