我得到了这个错误
ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
只因为这条线
oldProject = db.Projectes.Find(project.ID);
我需要它以便在编辑之前获取对象,然后比较编辑前后的值变化,我在第三个 if 语句(比较一个值)和“SFSiteEmailSend.ProjectEdited”函数中进行只检查更改并发送有关它的电子邮件。
顺便说一句,我从不更改“旧项目”,即使我删除了所有电子邮件功能和第三个(最后一个)if 语句,错误仍然存在。
// POST: /Project/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
// For Email Send - start
string UrlProject = Request.Url.GetLeftPart(UriPartial.Authority) + Url.Action("Detail", "Project", new { id = project.ID });
Project oldProject = new Project();
Project newProject = new Project();
newProject = project;
oldProject = db.Projectes.Find(project.ID);
SFSiteEmailSend.ProjectEdited(oldProject, newProject, UrlProject);
// For Email Send - end
if (oldProject.Finished == false && newProject.Finished == true)
{
project.DateFinished = DateTime.Now;
}
db.Entry(project).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(project);
}