【发布时间】:2017-03-29 16:10:55
【问题描述】:
我在我的一个控制器上执行编辑操作时遇到了奇怪的行为。
这是我的代码:
public ActionResult Edit([Bind(Include = "ID,FirstName,LastName,Email,deleted,AId")] Information personInformation)
{
// to stop multiple calls to database
var lstOfPeople = db.Information.Where(x => x.deleted == false).ToList();
if (ModelState.IsValid)
{
if (lstOfPeople.Any(x => x.Email.Equals(personInformation.Email, StringComparison.CurrentCultureIgnoreCase) && x.ID != personInformation.ID))
{
ModelState.AddModelError("", "This email already exists!");
return View(personInformation);
}
db.Entry(personInformation).State = EntityState.Modified; // error here
db.SaveChanges();
return RedirectToAction("Index");
}
return View(personInformation);
}
现在,我在不同的控制器编辑操作中拥有几乎完全相同的代码,并且工作正常。这里是:
public ActionResult Edit([Bind(Include = "ID,RNumber,DateCreated,PersonWhoCreated,deleted")] OtherTable oTable)
{
if (ModelState.IsValid)
{
if (db.OtherTable.Any(x => x.RNumber.Equals(oTable.RNumber, StringComparison.CurrentCultureIgnoreCase) && x.ID != oTable.ID))
{
ModelState.AddModelError("RNumber", "This number already exists!");
return View(oTable);
}
db.Entry(oTable).State = EntityState.Modified; // no error here.. goes through fine.
db.SaveChanges();
return RedirectToAction("Index");
}
return View(oTable);
}
我收到的错误:
附加类型为“ProjectName.Models.Information”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。使用“附加”等时可能会发生这种情况。
知道为什么会这样吗?
【问题讨论】:
-
Information的主键是什么?您的实体集是否也启用了代理生成? -
@PoweredByOrange
ID是 Information 的主键。如何检查代理生成?
标签: c# entity-framework asp.net-mvc-5