将数据插入sqlserver时显示错误

时间:2012-09-11 11:42:20

标签: asp.net-mvc sql-server-2008 entity-framework

我在MVC中创建应用程序。当我尝试将数据插入SQL Server 2008时,它显示如下错误:

  

ObjectStateManager中已存在具有相同键的对象。   现有对象处于Unchanged状态。一个对象只能是   如果它处于添加状态,则再次添加到ObjectStateManager。

这是什么意思?

      Candidate candidate = _repository.GetCandidate(LoggedInCandidate.Id);

            candidate.Name = collection["Name"];
            candidate.Email = collection["Email"];
            candidate.Address = collection["Address"];
            candidate.ContactNumber = collection["ContactNumber"];
            candidate.MobileNumber = collection["MobileNumber"];
            candidate.LicenseNumber = collection["LicenseNumber"];
            int candidateId = _repository.AddCandidate(candidate);
            string[] languages = collection["Languages"].Split(',');
         foreach (string language in languages)
         {
             if (!string.IsNullOrEmpty(language))
             {
                 CandidateLanguage cl = new CandidateLanguage();
                 cl.CandidateId = candidateId;
                 cl.LanguageId = Convert.ToInt32(language);
                 _repository.AddCandidateLanguage(cl);
             }
         }

           _repository.Save();
           }

2 个答案:

答案 0 :(得分:0)

你已经找到了一个有id的候选人。为什么你再次将这个候选人插入上下文???

如果要插入新候选人,为什么要创建新候选人并插入。

答案 1 :(得分:0)

如果您希望复制现有实体并在此之后修改某些属性,则需要复制构造函数(或具有类似想法的东西),然后将新实体插入db。

如果你想修改你当前的候选人,你会做

        Candidate candidate = _repository.GetCandidate(LoggedInCandidate.Id);

        candidate.Name = collection["Name"];
        candidate.Email = collection["Email"];
        candidate.Address = collection["Address"];
        candidate.ContactNumber = collection["ContactNumber"];
        candidate.MobileNumber = collection["MobileNumber"];
        candidate.LicenseNumber = collection["LicenseNumber"];

        _repository.Entry(candidate).State = EntityState.Modified;

        ....

        _repository.Save();