运行此代码时出现此错误。我找了解决方案虽然我不喜欢使用MARS的想法,因为它可能包含大量数据,这里有其他选择吗?我也可以编辑数据库中的变量,而不像我在这里那样重写所有变量,这会节省服务器功率还是没有差别?
已经有一个与此命令关联的打开DataReader,必须先关闭它。
public ActionResult CheckLinks(Link model)
{
var userId = User.Identity.GetUserId();
var UserTableID = db.UserTables.Where(c => c.ApplicationUserId == userId).First().ID;
foreach (var item in db.Links.Where(p => p.UserTable.ID == UserTableID))
{
string pageContent = null;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(item.Obdomain);
HttpWebResponse myres = (HttpWebResponse)myReq.GetResponse();
using (StreamReader sr = new StreamReader(myres.GetResponseStream()))
{
pageContent = sr.ReadToEnd();
}
string live = "";
if (pageContent.Contains(item.Obpage))
{
live = "Yes";
}
else { live = "No"; }
var link = new Link { Obdomain = item.Obdomain, ClientID = item.ClientID, Obpage = item.Obpage, BuildDate = item.BuildDate, Anchor = item.Anchor, IdentifierID = item.IdentifierID, live = (Link.Live)Enum.Parse(typeof(Link.Live), live), UserTableID = item.UserTableID };
db.Entry(link).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Index");
}
答案 0 :(得分:2)
实体框架一次只允许每个上下文一个活动命令。您应该在以下语句的末尾添加.ToList()
:
db.Links.Where(p => p.UserTable.ID == UserTableID).ToList();
所以你的代码看起来像这样:
var items = db.Links.Where(p => p.UserTable.ID == UserTableID).ToList();
foreach (var item in items)