Tech Days フォローアップ(その5)  ADO.NET Entity Framework ストアドプロシージャのモデリング

みなさん、こんにちは。今日はADO.NET Entity Frameworkにおけるストアドプロシージャの利用方法についてご紹介します。

特にEFに限って言えばストアドプロシージャはこんなところで効果を発揮します。

・個別DB依存処理

   SQL Server、Oracleなどがもつ、固有のコマンドなどを実行できます。

・パフォーマンス改善

   LINQ to SQL と同様にADO.NET Entity Frameworkは複数行同時更新に対応していません。結果ラウンドトリップ回数が増えてしまいパフォーマンスが落ちてしまう可能性があります。

そのような問題の解決策として、まとめてUpdate、Delete処理を実行できます。

 

今日は簡単な利用手順をお伝えします。詳細は以下のURLをご覧ください。

https://msdn.microsoft.com/ja-jp/library/bb399203.aspx

ちなみにストアドプロシージャは下記を利用します。(手抜きでスミマセン)

ALTER PROCEDURE [dbo].[InsertDrinkProduct]

  @productid int

  ,@productname nvarchar(40)

  ,@size int

AS

 insert into [dbo].[Products]([ProductID], [ProductName], [Discontinued])

 values (@productid, @productname, 0);

 insert into [dbo].[DrinkDetails]([ProductID], [Size])

 values (@productid, @size);

① Entity Data Modelウィザードで必要となるストアドプロシージャをインポートします。

 

②インポートするとモデルブラウザにこんな感じで表示されます。今回はInsertDrinkProductという名前のストアドプロシージャで入力パラメータが3つ(productid, productname, size) あります。

③ この状態ですとストアスキーマのみに定義された状態です。よって概念スキーマにもEntityとして定義が必要になりますので、右クリックしてコンテキストメニューから関数のインポートを実行します。

④ こんな感じのダイアログが表示されます。関数インポート名にはすきなEntityの名前を指定します。

⑤ モデルブラウザを展開してみるとEntity が作成されているのがわかります。これでEntity ClientやObject Servicesを使った呼び出しが可能になります。

今日はストアドプロシージャのモデリングまでお伝えしました。次回は実際にEntity ClientやObject Servicesを使ったプログラムをお見せします。