Asp.net mvc SQL Server 2000中的MARS
我正在使用实体框架在ASP.NETMVC1.0和SQLServer2000中工作。 我的故障控制器代码如下所示:Asp.net mvc SQL Server 2000中的MARS,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我正在使用实体框架在ASP.NETMVC1.0和SQLServer2000中工作。 我的故障控制器代码如下所示: int checkUser = id ?? 0; string userNameFromNew, userNameToNew; if (checkUser == 1) { userNameFromNew = "U" + Request.Form["user
int checkUser = id ?? 0;
string userNameFromNew, userNameToNew;
if (checkUser == 1)
{
userNameFromNew = "U" + Request.Form["usernameFrom"];
userNameToNew = "U" + Request.Form["usernameTo"];
}
else
{
userNameFromNew = "C" + Request.Form["usernameFrom"];
userNameToNew = "C" + Request.Form["usernameTo"];
}
var rMatrix = from Datas in repository.GetTotalRightData()
where Datas.UserName == userNameFromNew.Trim()
select Datas;
Right_Matrix RM = new Right_Matrix();
foreach(var Data in rMatrix)
{
RM.Column_Id = Data.Column_Id;
RM.ProMonSys_Right = Data.ProMonSys_Right;
RM.UserName = userNameToNew;
UpdateModel(RM);
this.repository.AddRightTransfer(RM);
}
return RedirectToAction("RightTransfer");
public void AddRightTransfer(Right_Matrix RM)
{
context.AddObject("Right_Matrix", RM);
context.SaveChanges();
}
我的故障型号代码如下所示:
int checkUser = id ?? 0;
string userNameFromNew, userNameToNew;
if (checkUser == 1)
{
userNameFromNew = "U" + Request.Form["usernameFrom"];
userNameToNew = "U" + Request.Form["usernameTo"];
}
else
{
userNameFromNew = "C" + Request.Form["usernameFrom"];
userNameToNew = "C" + Request.Form["usernameTo"];
}
var rMatrix = from Datas in repository.GetTotalRightData()
where Datas.UserName == userNameFromNew.Trim()
select Datas;
Right_Matrix RM = new Right_Matrix();
foreach(var Data in rMatrix)
{
RM.Column_Id = Data.Column_Id;
RM.ProMonSys_Right = Data.ProMonSys_Right;
RM.UserName = userNameToNew;
UpdateModel(RM);
this.repository.AddRightTransfer(RM);
}
return RedirectToAction("RightTransfer");
public void AddRightTransfer(Right_Matrix RM)
{
context.AddObject("Right_Matrix", RM);
context.SaveChanges();
}
我的代码在模型代码中显示错误,说明DataReader已经打开,我需要先关闭它
请建议解决方法。尝试将AddRightTransfer循环移出LINQ foreach,并转移到一个单独的循环中。我认为LINQ是在关闭数据库结果集之前执行第一个add。通过将AddRightTransfer调用移动到第二个foreach中,您应该避免出现问题(如果是这样的话) 下面是一个例子:
List<Right_Matrix> matrixes = new List<Right_Matrix>();
foreach (var Data in rMatrix)
{
Right_Matrix rm = new Right_Matrix();
rm.Column_Id = Data.Column_Id;
rm.ProMonSys_Right = Data.ProMonSys_Right;
rm.UserName = userNameToNew;
UpdateModel(rm);
matrixes.Add(rm);
}
foreach (var rm in matrixes)
{
this.repository.AddRightTransfer(rm);
}
列表矩阵=新列表();
foreach(rMatrix中的var数据)
{
右矩阵rm=新的右矩阵();
rm.Column\u Id=Data.Column\u Id;
rm.ProMonSys_Right=Data.ProMonSys_Right;
rm.UserName=userNameToNew;
更新模型(rm);
矩阵。添加(rm);
}
foreach(矩阵中的var rm)
{
this.repository.AddRightTransfer(rm);
}
问题在于您在修改数据库的同时仍在对其进行迭代。在修改之前完成查询,如下所示:
foreach(var Data in rMatrix.ToArray())
foreach(var Data in rMatrix)
{
RM.Column_Id = Data.Column_Id;
RM.ProMonSys_Right = Data.ProMonSys_Right;
RM.UserName = userNameToNew;
UpdateModel(RM);
context.AddObject("Right_Matrix", RM);
}
context.SaveChanges();
或者不要修改循环中的数据库,如下所示:
foreach(var Data in rMatrix.ToArray())
foreach(var Data in rMatrix)
{
RM.Column_Id = Data.Column_Id;
RM.ProMonSys_Right = Data.ProMonSys_Right;
RM.UserName = userNameToNew;
UpdateModel(RM);
context.AddObject("Right_Matrix", RM);
}
context.SaveChanges();
显然,这两个
上下文。
调用必须在您的存储库中的方法中进行,但您了解情况。谢谢,我将尝试并回复。