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」 を選択します。

1

すると次のような画面が表示されます。

「Return a Collection Of」 で 「Complex」 をチェックします。

「Get Column Information」ボタンを押すと、ストアドプロシージャを解析して出力カラムの一覧が表形式で表示されます。

「Create New Complex Type」ボタンを押すと、自動的に Complex Type のオブジェクトが生成されます。今回は「reqtq1_Result」とう名称になっていますね。

2

「OK」ボタンを押してモデルブラウザを確認すると、次のように 「Complex Types」 と 「Function Import」 にオブジェクトが生成されます。

3

最後に実際使ってみましょう。コードはこんな感じです。

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); } }

やはり既存資産やスキル、パフォーマンスを考慮するとストアドプロシージャも必要になることが多いのではないでしょうか。実際、使ってみてください。