我有一个数据表,其中包含一组键值对。
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删除和附加和删除查找,但显然我正在以正确的方式接近。
答案 0 :(得分: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查找对象,以便我有一个仍然链接到数据存储的对象。