Asp.net ASPxGridview主详细信息-EntityDatasource,并发异常始终存在

Asp.net ASPxGridview主详细信息-EntityDatasource,并发异常始终存在,asp.net,devexpress,Asp.net,Devexpress,我有一个父gridview和一个detail gridview,我可以插入/更新/删除父gridview。我可以在detail GridView上插入新记录,但无法更新/删除任何detail GridView中的任何记录。我收到以下异常 Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目 我知道这是不可能的,因为我是唯一编辑这张唱片的人 如何修复此问题?首先,如果您的bind出现问题,

我有一个父gridview和一个detail gridview,我可以插入/更新/删除父gridview。我可以在detail GridView上插入新记录,但无法更新/删除任何detail GridView中的任何记录。我收到以下异常

Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目

我知道这是不可能的,因为我是唯一编辑这张唱片的人


如何修复此问题?

首先,如果您的bind出现问题,请遵循以下步骤:

如果一切正常,则是实体框架在存储数据时的问题,在执行删除或更新操作时传递错误。正如我所探讨的,这是由于实体的ID(key)字段没有设置造成的。因此,当上下文去保存数据时,它找不到主键字段=0。确保在update语句中放置断点,并验证已设置实体的ID

正如我所想,尝试设置 细节网格。它应该能解决你的问题

请点击以下链接以供参考:



参考:

好的,我找到了答案,不需要版本的附加栏,但混合了我在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意味着它现在可以按预期工作了

这与正在发生的事情非常接近,我没有显示其中一个foreignkey id,因为这是主-详细关系id。我在gridview中将此列作为隐藏列包含,修复了此问题,但现在更新时版本列为null,我认为这意味着我也应该包含此列,但不确定列类型应该是什么。