Sql server 已经有一个开放的DataReader
我的cshtml中有一些代码:Sql server 已经有一个开放的DataReader,sql-server,entity-framework,Sql Server,Entity Framework,我的cshtml中有一些代码: @model IEnumerable<Floor> @{ var floors = Model } @model IEnumerable @{ var地板=模型 } 我在这一行有个错误: @foreach(楼层中的可变车间) 我可以在模型赋值后使用.ToList()来解决这个问题 错误的原因可能是什么?谁面对过 此错误偶尔出现。每个数据库连接一次只能支持一个数据读取器。您的Model和foor\l使用相同的连接,因此您只能同时读取其中一个
@model IEnumerable<Floor>
@{
var floors = Model
}
@model IEnumerable
@{
var地板=模型
}
我在这一行有个错误:
@foreach(楼层中的可变车间)
我可以在模型赋值后使用.ToList()来解决这个问题
错误的原因可能是什么?谁面对过
此错误偶尔出现。每个数据库连接一次只能支持一个数据读取器。您的
Model
和foor\l
使用相同的连接,因此您只能同时读取其中一个
添加
.ToList()
将从数据读取器读取所有记录到列表中,然后关闭数据读取器。这使得连接可以自由地供下一个数据读取器使用。在connectionString中,请小心延迟加载。如果启用了该选项,例如,如果在循环中执行某些操作,则可能会出现此错误
如果您不想关闭延迟加载(并且如果需要,必须记住再次打开它),解决这个问题的一种方法是使用渴望加载,您可以通过向查询中添加Include()
语句来实现。例如,如果您有一个名为联系人
的实体,并且在联系人
上有一个对地址
实体集合的引用,并且您希望获得要查询的联系人
的地址,请在LINQ查询中使用此项
.Include("Addresses")
这将通过生成的查询为每个加载的联系人
加载地址
。不过,对于每个要使用“急切加载”的查询,请谨慎使用Include()
,因为可能会影响性能 似乎是的复制品,看一看,因为我相信这个问题的答案适用于你:)