用户更改密钥时保存模型时出错
Error Saving Model when Key has changed by user
我有一个使用字符串而不是 Id 作为键的模型。
public class Item
{
[Key]
public string SerialNo { get; set; }
但是,我在保存时遇到问题:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Item model)
{
if (ModelState.IsValid)
{
_db.Entry(model).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
我在更新记录和更改 SerialNo 值时遇到错误:
Store update, insert, or delete statement affected an unexpected number of rows... Entities may have been modified or deleted since entities were loaded.
此错误可能意味着以下某些情况:
- 如错误提示,可能是因为您从数据库中获取实体(并发),所以该实体已被修改
- 您的数据库可能不包含具有该 ID 的实体
- 可能是您在解决方案中使用了 2 个不同的 DBContext
这些是一些可能的事情。
我想发表评论,但我没有这样做的声誉,所以我直接回答了。
试试这个
existedItem = _db.Set<Item>().FirstOrDefault( i=> i.SerialNo == model.SerialNo );
if (existedItem != null)
{
_db.Entry(existedItem).CurrentValues.SetValues(model);
_db.SaveChanges();
}
like the error only occurs when I edit a record and change the SerialNo field
您不能更新 EF 中的键,通常也不应该更新主键。
如果您确实需要,可以使用原始 SQL 查询,或删除、SaveChanges()、插入。
我有一个使用字符串而不是 Id 作为键的模型。
public class Item
{
[Key]
public string SerialNo { get; set; }
但是,我在保存时遇到问题:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Item model)
{
if (ModelState.IsValid)
{
_db.Entry(model).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
我在更新记录和更改 SerialNo 值时遇到错误:
Store update, insert, or delete statement affected an unexpected number of rows... Entities may have been modified or deleted since entities were loaded.
此错误可能意味着以下某些情况:
- 如错误提示,可能是因为您从数据库中获取实体(并发),所以该实体已被修改
- 您的数据库可能不包含具有该 ID 的实体
- 可能是您在解决方案中使用了 2 个不同的 DBContext
这些是一些可能的事情。
我想发表评论,但我没有这样做的声誉,所以我直接回答了。
试试这个
existedItem = _db.Set<Item>().FirstOrDefault( i=> i.SerialNo == model.SerialNo );
if (existedItem != null)
{
_db.Entry(existedItem).CurrentValues.SetValues(model);
_db.SaveChanges();
}
like the error only occurs when I edit a record and change the SerialNo field
您不能更新 EF 中的键,通常也不应该更新主键。
如果您确实需要,可以使用原始 SQL 查询,或删除、SaveChanges()、插入。