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


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


 


・免疫機能


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


・皮膚


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


・視力


 視力の衰え、白内障


 


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


・ビジュアル


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


・免疫機能


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


・精神疲労の回復


 


う~ん、微妙ですね。日焼けについては専門家にまかせるとして、この夏、多くの時間を費やしたVisual Studio 2010ネタをフォローアップしておきましょう。今日は前回、ご紹介できなかったTechEd 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のマッピング


SSDLSchema要素以下に記述します。


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


          };

Comments (0)

Skip to main content