LINQ to SQLではまった。 素直にやれば簡単だったのに。
Web Form ではLINQtoSQLを使ってDBアクセスしたことなかったので、
ちょっとしたアプリを作るのに使ってみたら思いっきりはまった。
FormViewでデータの登録は出来たのだが、編集が出来ない。
からの
これ。
'/' アプリケーションでサーバー エラーが発生しました。
行が見つからないか変更されています。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。例外の詳細: System.Data.Linq.ChangeConflictException: 行が見つからないか変更されています。
ソース エラー:
現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。スタック トレース:
[ChangeConflictException: 行が見つからないか変更されています。]
System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +934622
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +391
System.Web.UI.WebControls.LinqToSqlWrapper.SubmitChanges(DataContext dataContext) +23
System.Web.UI.WebControls.LinqDataSourceView.UpdateDataObject(Object dataContext, Object table, Object oldDataObject, Object newDataObject) +108
System.Web.UI.WebControls.LinqDataSourceView.UpdateObject(Object oldEntity, Object newEntity) +246
System.Web.UI.WebControls.QueryableDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +103
System.Web.UI.WebControls.ContextDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +95
System.Web.UI.WebControls.LinqDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +42
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +106
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +1210
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +877
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +89
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +90
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +161
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9721782
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
どういうことだ?!意味が不明。
色々戻したりして見たが直らず。
必死にググったら、答えが見つかった。
ベストアンサーが面白かった。
Double check for nullable!
と書いてあったが、ほんとにそれが原因。ありがとうございました。
LINQ to SQL クラスを追加したあとで、テーブルにAutoincrementを付与した際に、Nullableの設定を触ってしまっていた。
内部的には、更新のキーからはずれてしまってデータが見つからない、になってしまうのだろうか。
取りあえず、Nullableをテーブルの定義と合わせて、読み取り専用をTrueにしてたのを戻して、一件落着。
このサイトを参考に作成中。お世話になっております。