關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

Entity Framework 4.0 與 2.0 發現的差異?!

這裡的測試使用環境為Vistual Studio 2010 ,因此可分別建立.net 3.5 使用EF2.0 ,與.net 4.0使用EF4.0的專案來做比較。相信可以更容易感受到此功能的差異。

在開始前,先建立關聯的資料表,關聯圖如下:

擷取3

這裡有兩個多對多的資料表,分別為Block與Items,而這兩個資料表於Entity Framework 中的Model圖如下:

擷取1

因為BlockItems是兩個Table的關聯資料表,因此會直接在Model圖中,對應多對多關係。

在建立Entity Framework 時可選擇的選項畫面如下。

VS2008 .Net3.5設定畫面:

擷取6

VS2010 .Net3.5設定畫面:

擷取4 

VS2010 .Net4.0 設定畫面:

擷取5

接著實際寫一段code將Block逐筆寫出,並且於Block下逐筆寫出其包含之Items,

static void Main(string[] args)
{
  Entities context = new Entities();
  var q = from a in context.Block
          select a;
  foreach (var block in q)
  {
    Console.WriteLine("取區塊名稱:" + block.BlockName);
    foreach (var item in block.Items)
    {
      Console.WriteLine("---選購項目:" + item.Name);
    }
  }
}

寫出結果如下:

vs2010 .net3.5 輸出結果:

擷取7

vs2010 .net 4.0 輸出結果:

擷取8

這邊可以看出結果的差異!!!!!

為什麼會有這樣的差異呢?!

底下Debug,看一下分別在不同Framework 下,可取到的Items 資料的差異。

vs2010 .net3.5  Items內容數:

擷取0

vs2010 .net 4.0 Items內容數:

擷取

可以看到,在Entity Framework 4.0 當我們用LINQ to Entity 取到Block 時,

便同時已經取到跟他相關聯的所有Items 了,可是在Entity Framework 2.0,這是沒辦法做到的。

因此於EF4.0中,更加貼近我們是在操做Entity了!

原因為何我還不清楚,原以為是新增的 Include foreign key columns in the model 功能影響。

但經過測試,於EF4.0建立Model時,故意不勾選此選項,結果EF4.0依然可正確的抓到Items 值。

先將此問題做紀錄,待有空再來研究原因為何。

沒有留言:

張貼留言