Visual Studio 2010 ベータ2 EF4 ストアドプロシージャ改良点
すでに MS 社内は Techdays のスピーカーアサインなどで盛り上がっています。私はおそらく EF4 ( Entity Framework 4) のセッションを担当させて頂くことになりそうです。これは気合を入れて良いコンテンツを作らねば・・・・・・・・と今から構想を練っています。
何かコンテンツについて、ご希望あれば正月休みを返上してでも準備するので、ご連絡ください。
さて、今日は 新機能をご紹介しましょう。
EF 4 では ストアドプロシージャまわりも機能強化が行われているようです。
(そもそも、ドメイン層の実装をストアドプロシージャに含めてよいのかという議論は隅っこにおいておきます。)
現行 EF 1 ではストアドプロシージャの戻り値として「None」、「Scalar」、「Entity」が指定できました。EF 4 ではこれに「Complex Type」が追加されました。
ちなみに、ストアド プロシージャへの複合型のマッピング (Entity Framework) にある通り、EF 1 でも 「Complex Type」 にマッピングすることは可能でした。ただし、デザイナレベルでのサポートが実装されておらず、edmgen.exe などのコマンドラインツールを利用する必要がありました。 おそらく使っていた方は限りなく少ないと思います。
EF 4 ではデザイナレベルでサポートされることになり、誰でも簡単に使えることになります。
実際にpubs データベースを使って確認してみましょう。
ストアドプロシージャも忘れずにインポート。そしてモデルブラウザから「Add Function Import」 を選択します。
すると次のような画面が表示されます。
「Return a Collection Of」 で 「Complex」 をチェックします。
「Get Column Information」ボタンを押すと、ストアドプロシージャを解析して出力カラムの一覧が表形式で表示されます。
「Create New Complex Type」ボタンを押すと、自動的に Complex Type のオブジェクトが生成されます。今回は「reqtq1_Result」とう名称になっていますね。
「OK」ボタンを押してモデルブラウザを確認すると、次のように 「Complex Types」 と 「Function Import」 にオブジェクトが生成されます。
最後に実際使ってみましょう。コードはこんな感じです。
static void Main(string[] args) { pubsEntities db = new pubsEntities(); foreach (reptq1_Result result in db.reptq1()) { Console.WriteLine(result.pub_id); Console.WriteLine(result.avg_price); } } |
やはり既存資産やスキル、パフォーマンスを考慮するとストアドプロシージャも必要になることが多いのではないでしょうか。実際、使ってみてください。