0

我有一个数据表,其中包含键值对列表。

Key            Value
--------------------
ElementName    PrimaryEmail 
Email          someemail@gmail.ca   
Value          Content/Images/logo-here.jpg

我能够在我的客户端网页上生成新项目。何时,我在客户端上创建一个新行并通过执行以下代码将其保存到服务器,该项目按预期保存到数据库中。

public ViewResult Add(CardElement cardElement) 
{      
   db.Entry(obj).State = EntityState.Added;
   db.SaveChange();
   return Json(obj);
}

现在,当我想通过发送另一个 ajax 请求来删除我的对象时,我遇到了失败。

public void Delete(CardElement[] cardElements)
{
    foreach (var cardElement in cardElements)
    {
        db.Entry(cardElement).State = EntityState.Deleted;
    }
    db.SaveChanges();
}

这会导致以下错误。

存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。

我尝试了其他删除方式,包括按 id 删除和附加和删除查找,但显然我正在以正确的方式接近。

4

1 回答 1

0

我不确定是什么导致了您的问题,但我倾向于按如下方式构建我的删除:

public void Delete(CardElement[] cardElements)
{
    foreach (var cardElement in cardElements)
    {
        var element = db.Table.Where(x => x.ID == cardElement.ID).FirstOrDefault();

        if(element != null)
           db.DeleteObject(element);
    }
    db.SaveChanges();
}

虽然我倾向于先做数据库开发,这可能会稍微改变一些事情。

编辑:您收到的错误表明没有更新任何行。当您将对象传递给视图,然后将其传递回控制器时,这往往会破坏对象和数据存储之间的链接。这就是为什么我更喜欢首先根据其 ID 查找对象,以便我有一个仍然链接到数据存储的对象。

于 2012-06-19T11:10:57.757 回答