BindingSource.DataSource に LINQ to Entity の ObjectQuery を指定してはいけない

Windows の フォームコントロールで、BindingNavigator + BindingSource + Entity Framework + LINQ to Qntity を使用してデータベースの値を書き換えるプログラムを作っていてみつけたのでメモ。
 
Entity Framework のエンティティに対してLINQ to Entity の返り値となるObjectQuery 型 (IQueryable型を継承した型) を BindingSource.DataSource に適用すると、BindingNavigator でカレントのアイテムを切り替えるたびにクエリが発行されます。
 
Entity Framework のエンティティのコレクションをBindingSource のデータソースとして使用する場合は、ObjectQuery<T>.Execute を使用して、返されるObjectResult<T> をデータソースに指定することでこの問題を回避できます。
ObjectQuery.ToList() を指定してList 型にすると更新は行えますが、削除などBindingNavigator を通して自動的に提供される機能がうまく働かなくなります。
広告
カテゴリー: .NET パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中