2012-04-07 2 views
0

У меня есть родительское gridview и gridview, я могу вставить/обновить/удалить родительский gridview. Я могу вставить новые записи в подробные gridviews. Но я не могу обновлять/удалять любые записи в любом из подробных gridviews, я получаю следующее исключение.ASPxGridview Master-Detail - EntityDatasource, Concurrency Exception всегда

Операция обновления, вставки или удаления магазина влияет на неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены. Обновить записи ObjectStateManager.

Я знаю, что это невозможно, потому что я единственный, кто редактирует эту запись.

Как это исправить?

ответ

0

Прежде всего, если вы делаете что-то неправильно с затруднительным затем следовать за этим:
How to implement common scenarios when using the ASPxGridView component/MVC GridView Extension bound with EntityDataSource/Entity Framework

Если все правильно, то это Entity Framework вопрос в хранении данных, она передается неправильно во время удаления или обновления. Как я выяснил, это связано с тем, что поле идентификатора объекта (ключа) не установлено. Таким образом, когда контекст переходит на сохранение данных, он не может найти поле первичного ключа = 0. Обязательно поместите точку останова в свой оператор обновления и убедитесь, что идентификатор объекта установлен.

Как я думаю, попытаться установить 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

Ref: DevExpress Master Detail Example

+0

это очень близко к тому, что происходит, я не отображая один из ForeignKey идентификаторов, как это мастер подробный идентификатор отношения. Я включил это как скрытый столбец в gridview, который исправляет это, но теперь в столбце Version указано значение null при обновлении, которое, как я полагаю, означает, что я должен включить это также, но я не уверен, какой тип столбца должен быть. – keyoke

0

Ok я нашел ответ, не нужен дополнительный столбец для версии, но смешанные две проблемы поддержки, которые я нашел на сайте 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 ид означает, что он теперь работает, как ожидалось