首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑insert、insert或delete语句影响到意外的行数(0)

编辑insert、insert或delete语句影响到意外的行数(0)
EN

Stack Overflow用户
提问于 2012-11-27 15:00:16
回答 2查看 11.9K关注 0票数 2

因此,我需要能够编辑我的编辑页面中的主键字段一行,我得到了错误。

存储update、insert或delete语句影响到意外的行数(0)。实体可能已被修改或删除,因为实体是加载的。刷新ObjectStateManager条目。

如果不更改主键字段,则可以将所有其他更改保存到数据库中。

这是我的编辑功能。

代码语言:javascript
复制
//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);
}

我将如何编辑主键,或者我是否以错误的方式处理这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 15:46:02

在使用ORMs类似的实体框架时,UPDATE命令的组成基本如下:

代码语言:javascript
复制
UPDATE table 
SET ChangedCol = ChangedVal 
WHERE PrimaryKeyCol = PrimaryKeyValAtLoadTime

之后,它将检查受影响的行数以匹配预期值。

因此,当您试图更改PK时,update命令将不会更新任何行,并且检查将失败。

真正的问题是:为什么要更改主键值?

票数 3
EN

Stack Overflow用户

发布于 2012-12-16 18:11:30

代码语言:javascript
复制
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();
                    }
            }
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13586995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档