因此,我需要能够编辑我的编辑页面中的主键字段一行,我得到了错误。
存储update、insert或delete语句影响到意外的行数(0)。实体可能已被修改或删除,因为实体是加载的。刷新ObjectStateManager条目。
如果不更改主键字段,则可以将所有其他更改保存到数据库中。
这是我的编辑功能。
//edit - post
[HttpPost]
public ActionResult ActiveCampaignsEdit(ActiveCampaign activecampaign)
{
try
{
if (ModelState.IsValid)
{
db.Entry(activecampaign).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("ActiveCampaigns");
}
}
catch (DataException err)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError(string.Empty, err.Message);
}
ViewBag.TypesList = new SelectList(db.Types, "TypeId", "TypeName");
ViewBag.CaptureFormsList = new SelectList(db.CaptureForms, "Id", "Name");
ViewBag.AssignedUsersList = new SelectList(db.Users, "Id", "Username");
return View(activecampaign);
}我将如何编辑主键,或者我是否以错误的方式处理这个问题?
发布于 2012-11-27 15:46:02
在使用ORMs类似的实体框架时,UPDATE命令的组成基本如下:
UPDATE table
SET ChangedCol = ChangedVal
WHERE PrimaryKeyCol = PrimaryKeyValAtLoadTime之后,它将检查受影响的行数以匹配预期值。
因此,当您试图更改PK时,update命令将不会更新任何行,并且检查将失败。
真正的问题是:为什么要更改主键值?
发布于 2012-12-16 18:11:30
public void Save(object entity)
{
using (var transaction = Connection.BeginTransaction())
{
try
{
SaveChanges();
transaction.Commit();
}
catch (OptimisticConcurrencyException)
{
if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Deleted || ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Modified)
this.Refresh(RefreshMode.StoreWins, entity);
else if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Added)
Detach(entity);
AcceptAllChanges();
transaction.Commit();
}
}
}https://stackoverflow.com/questions/13586995
复制相似问题