Spring Linq CTP finally hits the shelves! と
DLinq User-Defined Function support より
sqlmetal というツールを使って DLinq で必要になるソースコードを自動作成してくれるそうですが、このとき /sprocs というオプションをつけておくとストアドプロシージャを呼び出すためのコードも作成してくれるそうです。
この 「ストアドプロシージャを呼び出すためのコード」 ですが、MethodInfo.GetCurrentMethod() を引数に ExecuteStoredProcedure を呼び出すというような感じで書かれています。これからすると、呼び出し元メソッド自身の Attribute なんかを見て呼び出すべきプロシージャの名前や引数を決定して、普通に呼び出すだけみたいですね (けど、これだと実行のたびに解釈しなくちゃいけないような気がする)。
同じく /functions をつけておくとユーザ定義関数 (User Defined Function) を呼び出すためのコードを作成してくれるそうです。
こちらは Expression Tree を作り出すコードが作り出されています。そのおかげで、
var q = from c in db.Categories
select new {c.CategoryName,
Total=db.TotalProductUnitPriceByCategory(c.CategoryID)};
という C# 上のコードが
SELECT [t0].[CategoryID],
[dbo].[TotalProductUnitPriceByCategory]([t0].[CategoryID]) AS [value]
FROM [Categories] AS [t0]
という SQL に展開されるわけですね (すなわち、ユーザ定義関数は SQL 上で実行されるのであって、C# 上で実行されるのではない)。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。