Asp.net mvc SQL Server 2000中的MARS

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

我正在使用实体框架在ASP.NETMVC1.0和SQLServer2000中工作。 我的故障控制器代码如下所示:

            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();

显然,这两个
上下文。
调用必须在您的存储库中的方法中进行,但您了解情况。

谢谢,我将尝试并回复。