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を使ったプログラムをお見せします。