Entity Framework 4.xを利用しているシステムをリニューアルする事になり、
.NET Frameworkのバージョンを上げ、Entity Framework も 5 にバージョンアップさせました。
その状態で実行すると、
Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported Entity Framework 5
というエラーメッセージが表示されました。
日本語環境だと、
ストア クエリ (DbSet、DbQuery、DbSqlQuery) への直接のデータ バインドはサポートされていません。代わりに、DbSet で Load を呼び出すなどして DbSet にデータを設定し、ローカル データにバインドしてください。WPF の場合は DbSet.Local に、WinForms の場合は DbSet.Local.ToBindingList() にバインドします
と表示されました。
元々のプログラムは単純で、
テーブルから取得したデータをドッロプダウンリストにバインドしているだけです。
using (var context = new DeomDbEntities()) { var testObject = from master in context.code_name where master.code_type == '1' && master.delete_flg == '0' orderby master.display_order select new { code_value = master.code_value, code_text = master.code_text }; if (testObject != null) { dropDownList.DataSource = testObject; dropDownList.DataValueField = "code_value"; dropDownList.DataTextField = "code_text"; dropDownList.DataBind(); } }日本語のエラーメッセージが分かり難かったのですが、
要は「クエリを直接データソースに設定するな」という事だとだと思い、
dropDownList.DataSource = testObject;
上記部分を
dropDownList.DataSource = testObject.ToList();
と変更する事で、エラーメッセージが表示されなくなりました。
ヒントとなる情報は国内サイトでは見つかりませんでしたが、
Stack Overflowで発見しました。
(プログラムでハマってしまった時に検索すると、大抵「Stack Overflow」に行き着きますよね・・・)
修正後のプログラムは以下に記載しておきます。
using (var context = new DeomDbEntities()) { var testObject = from master in context.code_name where master.code_type == '1' && master.delete_flg == '0' orderby master.display_order select new { code_value = master.code_value, code_text = master.code_text }; if (testObject != null) { dropDownList.DataSource = testObject.ToList(); dropDownList.DataValueField = "code_value"; dropDownList.DataTextField = "code_text"; dropDownList.DataBind(); } }余談ですが、Entity Frameworkのバージョンに関する情報は下記サイトが参考になりました。
Entity Framework の歴史を振り返る
C# , Entity Framework
0 件のコメント:
コメントを投稿