我有父网格视图和详细网格视图,我可以插入/更新/删除父网格视图。我可以在详细网格视图上插入新记录但是我无法更新/删除任何详细网格视图中的任何记录,我得到以下异常。
存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。
我知道这是不可能的,因为我是唯一编辑此记录的人。
我该如何解决这个问题?
答案 0 :(得分:0)
首先,如果你在使用bind做错了,那么请遵循以下步骤:
How to implement common scenarios when using the ASPxGridView component / MVC GridView Extension bound with EntityDataSource / Entity Framework
如果一切正确则存在数据时是实体框架问题,在删除或更新操作时传递错误。正如我所探讨的那样,这是因为实体的ID(密钥)字段没有被设置。因此,当上下文保存数据时,它找不到主键字段= 0.确保在更新语句中放置一个断点并验证是否已设置实体ID。
我认为尝试设置 KeyFieldName =" KeyFieldName" 细节网格。它应该解决你的问题。
请参阅以下链接以供参考:
Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0)."
http://smisro.blogspot.in/2010/04/store-update-insert-or-delete-statement.html
Kevin McNeish solution on this
答案 1 :(得分:0)
好的,我找到了答案,不需要版本的附加列,但混合了我在devexpress网站上发现的两个支持问题,并提出了以下内容。
protected void gvPackages_RowUpdating(object sender, ASPxDataUpdatingEventArgs e)
{
e.OldValues["Version"] = GetVersionField(sender as ASPxGridView);
}
Byte[] GetVersionField(ASPxGridView grid)
{
return grid.GetRowValues(grid.EditingRowVisibleIndex, "Version") as Byte[];
}
效果很好,这与foreignkey id一起意味着它现在按预期工作