我在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();
}
答案 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();