ASPxGridview Master-Detail - EntityDatasource,始终是并发异常

时间:2012-04-07 12:32:33

标签: asp.net devexpress

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

  

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

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

我该如何解决这个问题?

2 个答案:

答案 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

参考:DevExpress Master Detail Example

答案 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一起意味着它现在按预期工作