MVC - 使用EF将多个记录更新到数据库

时间:2014-03-20 10:51:29

标签: entity-framework asp.net-mvc-4

我是MVC的新手。使用EF将多个记录更新到数据库时出错。

  • 我想创建一个组并在其中添加成员。
  • 我创建了列表 框。我已将所有成员加载到左框中。
  • 我第一次创建了群组,并将成员从第一个框添加到第二个框,然后保存 表格。所有数据都已成功保存。
  • 当我来编辑群组时,我想添加/删除群组中的某些成员,我得到了 错误。

我使用以下代码进行编辑模式。

if (!string.IsNullOrEmpty(groupView.GroupName) && groupView.MemberIDs.Count > 0) 
{
Groups group = new Groups();
List<GroupMembers> existingMembers = null;
if (groupView.GroupID > 0)
{
       group.GroupID = groupView.GroupID;
   //db.Entry(group).State = EntityState.Modified;
   existingMembers = db.GroupMembers.ToList();
}
else
{
   group.GroupID = groupView.GroupID;
   group.GroupName = groupView.GroupName;
   group.IsActive = true;
   db.Groups.Add(group);
}
    GroupMembers groupMembers, member;
foreach (short memberId in groupView.MemberIDs)
{
   groupMembers = new GroupMembers();
       if (groupView.GroupID > 0)
   {
      //Check whether the Member already exists in the group
      member = existingMembers.Where(gm => gm.GroupID == groupView.GroupID && gm.MemberID == memberId).FirstOrDefault();
      if (member != null)
      {
    groupMembers.GroupMemberID = member.GroupMemberID;
    db.Entry(groupMembers).State = EntityState.Modified;
      }
      else
    groupMembers.GroupMemberID = 0;
   }
   groupMembers.GroupID = group.GroupID;
   groupMembers.MemberID = memberId;
   groupMembers.IsActive = Convert.ToBoolean(groupView.IsActive);
   if (groupMembers.GroupMemberID == 0)
       db.GroupMembers.Add(groupMembers);
}
db.SaveChanges();

在运行时,我收到以下异常:

  

ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法使用相同的键跟踪多个对象

如果我从上面的编码中删除了以下代码,则重复插入数据库中的数据。

  

db.Entry(group).State = EntityState.Modified;

我是MVC,EF的新手,据我所知,我编写了上述编码。我搜索并检查了一些错误信息的问题,但我无法理解清楚。所以我把我的编码。请指导我解决此问题。

提前致谢。

0 个答案:

没有答案