0

我有一个父网格视图和一个详细网格视图,我可以插入/更新/删除父网格视图。我可以在详细网格视图上插入新记录但我无法更新/删除任何详细网格视图中的任何记录我得到以下异常。

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

我知道这是不可能的,因为我是唯一一个编辑这条记录的人。

我怎样才能解决这个问题?

4

2 回答 2

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[];
    }

效果很好,这与外键 id 一起意味着它现在可以按预期工作

于 2012-04-09T11:42:28.183 回答
0

首先,如果您在绑定方面做错了事,请遵循以下内容:
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 对此的解决方案

参考:DevExpress Master Detail 示例

于 2012-04-09T08:17:17.457 回答