0

MVCでアプリケーションを作成しています。SQL Server 2008にデータを挿入しようとすると、次のようなエラーが表示されます。

同じキーを持つオブジェクトは、ObjectStateManagerにすでに存在します。既存のオブジェクトは変更されていない状態です。オブジェクトは、追加された状態にある場合にのみ、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();
           }
4

2 に答える 2

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();
于 2012-09-11T12:13:18.600 に答える
0

すでに ID を持つ候補者を取得しています。なぜこの候補をコンテキストに再度挿入するのですか???

新しい候補を挿入したい場合、なぜ新しい候補を作成して挿入するのか。

于 2012-09-11T12:03:24.477 に答える