2012-04-07 8 views
0

私は親のGridViewと詳細GridViewコントロールを持って、私は親のGridView /削除/更新を挿入することができます。詳細グリッドビューに新しいレコードを挿入することはできますが、詳細グリッドビューのレコードを更新/削除することはできません。次の例外が発生します。ASPxGridviewマスター・ディテール - EntityDatasource、同時実行例外常に

ストアの更新、挿入、または削除のステートメントが予期しない行数(0)に影響を与えました。エンティティはロードされた後に変更または削除された可能性があります。 ObjectStateManagerエントリを更新します。

私はこのレコードを編集している唯一の人なので、これは不可能です。

どうすればこの問題を解決できますか?あなたがバインドに何かをやっている場合は、すべての

答えて

0

まずこれに従います。
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

+0

期待どおりに機能するようになりましたことを意味し、これは、これがマスターであるように私は、IDののForeignKeyの1を表示していないです、何が起こっているかに非常に近いです詳細関係ID。これを修正したgridviewの非表示の列としてこれを含めましたが、バージョンの列が更新されたときにnullになっているので、これも含める必要がありますが、列の種類を確認する必要があります。 – keyoke

0

[OK]を私は、答えを見つけたバージョンのための追加の列を必要としませんでしたが、私がdevexpressサイトで見つけた2つのサポート問題を混在させ、以下を思いついた。

素晴らしい作品
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を持つ、これは

関連する問題