Teched 2009 フォローアップ4 【TH-302 ADO.NET Entity Framework vNext】

最近は涼しいですね。もう秋ですか?私の場合、仕事してたら、、、いつの間にか夏が終わっていた(泣)といった感じです。海に行ってません、そもそも日にあたっていません、当然、日焼けもしていません。でも日焼けってあまり人体にはよくないみたいですね。簡単に調べてみました。

・免疫機能

  風邪をひきやすくなる。ヘルペス発症などなど

・皮膚

 皮膚の老化を促進、皮膚ガンをまねく

・視力

 視力の衰え、白内障

メリットもあるようです。

・ビジュアル

健康的、活動的、爽やかな印象、シャープに見える。

・免疫機能

風邪をひきにくい、疲れがたまりにくい、皮膚アレルギーへ効果・・・あれ????

・精神疲労の回復

う~ん、微妙ですね。日焼けについては専門家にまかせるとして、この夏、多くの時間を費やしたVisual Studio 2010ネタをフォローアップしておきましょう。今日は前回、ご紹介できなかったTech・Ed TH-302で解説した関数のフォローアップをしたいと思います。

■Canonical Functions

Entity SQL 関数をLINQ to Entitiesでも利用できるようになりました。セミナー中ではLINQ to Entitiesサポート対象外の関数の代替として利用すると便利です。という話をしました。

 具体的に、下記を実行するとAddDays関数未サポートのためエラーが発生します。

var query = from o in db.Orders

            select new

            {

                o.OrderCode,

                OrderDate = o.OrderDate.AddDays(1)

            };

 そこで下記のように書き換えました。

var query = from o in db.Orders

          select new

          {

          o.OrderCode,

            OrderDate = EntityFunctions.AddDays(o.OrderDate, 1)

          };

■Database Functions

これはSQL Server 固有のビルトイン関数をLINQ to Entitiesで活用するためのものです。こんな感じでデータベースのタイムスタンプを取得したりするのに利用できます。

var query = from o in db.Orders

          select new

          {

   code = o.OrderCode,

   diff = SqlFunctions.DateDiff("yyyy", o.OrderDate, SqlFunctions.CurrentTimestamp()),

              user = SqlFunctions.CurrentUser()

         };

■Custom Database Functions

これはDBのユーザー定義関数をLINQ to Entitiesで活用するためのものです。手順は以下の通り。

1. Edmxファイルを開いて手動でDB Functionのマッピング

SSDLのSchema要素以下に記述します。

   <Function Name="AvgPrice" ReturnType="decimal" Schema="dbo">

   <Parameter Name="OrderCode" Mode="In" Type="int" />

   </Function>

2. Edmにマッピングしたスタブ関数を準備

 [EdmFunction("NorthwindJModel.Store", "AvgPrice")]

public static decimal AvgPrice(int OrderCode)

{

      throw new NotSupportedException();

}

3. LINQ to Entitiesで使ってみる

var query = from o in db.Orders

          select new

          {

          ordercode = o.OrderCode,

          avgprice = AvgPrice(o.OrderCode)

          };