我有一个父网格视图和一个详细网格视图,我可以插入/更新/删除父网格视图。我可以在详细网格视图上插入新记录但我无法更新/删除任何详细网格视图中的任何记录我得到以下异常。
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
我知道这是不可能的,因为我是唯一一个编辑这条记录的人。
我怎样才能解决这个问题?
我有一个父网格视图和一个详细网格视图,我可以插入/更新/删除父网格视图。我可以在详细网格视图上插入新记录但我无法更新/删除任何详细网格视图中的任何记录我得到以下异常。
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
我知道这是不可能的,因为我是唯一一个编辑这条记录的人。
我怎样才能解决这个问题?
好的,我找到了答案,不需要额外的版本列,而是混合了我在 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[];
}
效果很好,这与外键 id 一起意味着它现在可以按预期工作
首先,如果您在绑定方面做错了事,请遵循以下内容:
How to implement common scenario when using the ASPxGridView component / MVC GridView Extension bound with EntityDataSource / Entity Framework
如果一切都正确,那么是实体框架存储数据的问题,在删除或更新操作时传递错误。正如我所探讨的那样,这是由于未设置实体的 ID(键)字段造成的。因此,当上下文去保存数据时,它找不到主键字段 = 0。请务必在更新语句中放置一个断点并验证实体的 ID 是否已设置。
正如我认为尝试设置详细网格的KeyFieldName="KeyFieldName"。它应该可以解决您的问题。
请按照以下链接进行参考:
实体框架:“存储更新、插入或删除语句影响了意外数量的行 (0)。”
http://smisro.blogspot.in/2010/04/store-update-insert-or-delete-statement.html
Kevin McNeish 对此的解决方案