这个错误说明你在循环添加的时候存在相同的键值m.StaffReceiveId = Convert.ToInt32(sendArr[i]);StaffReceiveId 不能存在重复值,所以你需要首先去重复,然后再添加。

解决方案 »

  1.   

    我设断点试了很多遍,StaffReceiveId 没有重复啊。每循环一次的值都不一样,我还得从哪方面入手调试啊?
      

  2.   


    不仅仅是循环,调用 addMessage 方法时 可能会多次循环在这些操作之间 也不能有重复的
      

  3.   

    for (int i = 0; i < sendArr.Count(); i++)
      {
      m.StaffReceiveId = Convert.ToInt32(sendArr[i]);
      oaet.Messages.AddObject(m);
      oaet.SaveChanges();
      }   
      

  4.   

    for (int i = 0; i < sendArr.Count(); i++)
      {
      m.StaffReceiveId = Convert.ToInt32(sendArr[i]);
      oaet.Messages.AddObject(m);
      oaet.SaveChanges();
      }   
      

  5.   

    oaet.Messages.AddObject(m);
    你的这个方法是将对象加到 List 里面吗?
      

  6.   


    不是啊,AddObject是ef框架中的一个添加方法
      

  7.   

         如入Message表中又三个字段,一个是Id一个是name,另一个是StaffReceiveId ,
    在循环的时候,不给id赋值,因为id是主键。 public void addMessage(Message mm,string arr)
          {
              var sendArr = arr.Split('|');          for (int i = 0; i < sendArr.Count() - 1; i++)
              {
                  Message mmm = new Message();
                  mmm.MessageName = mm.MessageName;
                  mmm.StaffReceiveId = Convert.ToInt32(sendArr[i]);
                  md.addMessage(mmm);
              }
             
          }
      

  8.   

      for (int i = 0; i < sendArr.Count(); i++)
      {
      m.StaffReceiveId = Convert.ToInt32(sendArr[i]);
      oaet.Messages.AddObject(m);
      oaet.SaveChanges();
      oaet
         .ObjectStateManager
         .ChangeObjectState(m, System.Data.EntityState.Added);
      } 
    试试看