使用NuGet安裝Entity Framework 4.2

本文將介紹如何使用NuGet安裝Entity Framework 4.2,並以MSDN上的Walkthrough來測試Database First Model的功能。

早在4.1出來的時候大陸的MSDN論壇上就有許多網友在討論有關Entity Framework(以下簡稱EF) 4.1的Code First等新功能,一直撐到4.2都出來了筆者還沒開始研究,仍停留在EF 4.0的階段。今天下定決心來升級一下我的EF,搜尋了一下,發現Entity Framework 4.2已經在2011/11/1正式Release,因此決定跳過4.1,直接從4.2開始survey一下有哪些新功能,依照慣例,本文先介紹有關安裝的部分,說明如下:

現在許多Visual Studio的擴充功能都可以透過NuGet,因此筆者建議先去下載NuGet,從工具>擴充管理員開啟擴充管理員視窗,於下圖右1的地方輸入nuget按Enter即可搜尋到NuGet Package Manager,按下2的下載即可,筆者已經安裝過NuGet Package Manager因此只能解除安裝,若不透過擴充管理員也可以到Visual Studio檔案庫下載。

 

imageimage

 

NuGet Package Manager安裝完畢之後可以從工具>Library Package Manager>Package Manager Console開啟NuGet擴充管理員Console(如下圖右)。

 

imageimage

 

接著於命令提示字元中輸入【Install-Package EntityFramework】,會出現如下圖的錯誤訊息,告訴你必須要先開啟方案才行。

 

image

 

測試了半天在網路上找到的文件也都沒提到這個錯誤訊息該如何排除,仔細看錯誤訊息才發現已經有提示要先開方案才行,開了方案之後再重新執行【Install-Package EntityFramework】即可順利安裝成功,接著就可以在方案總管經看到加入參考EntityFramework組件。

 

image

 

接下來依照Walkthrough: Creating a Model from an Existing Database by Using Tools來測試EF 4.2,文章中的說明步驟相當清楚,特別注意要在Entity Designer的空白處點選右鍵再加入ADO.NET DbConetext Generator,否則會出現找不到檔案的錯誤訊息。

 

image

 

此外,若實作過程找不到如上圖螢光筆所標示之處的ADO.NET DbConetext Generator,必須在新增項目視窗中點選線上範本,於查詢文字方塊中輸入ADO.NET DbContext Genterator,再設定名稱後按下新增才能建立Walkthrough中所使用的範本。

 

image

image

 

出現詢問是否執行範本,直接按確定即可。

 

image

 

截至目前為止,已經建立好Database First Model,接著依照Walkthrough建立Console專案來測試剛建立的Model,步驟如下:

  1. 加入EntityFramework組件的參考。除透過Package Manager Console外,也可以用Manage Nuget Packages。

    imageimage
  2. 加入SchoolModel專案的參考。
  3. 複製SchoolModel專案的App.Config到Console專案。
  4. 將Console專案設定為起始專案。
  5. 開啟program.cs並import SchoolModel命名空間,接著於main方法中輸入下列程式碼。
       1: using (var context = new SchoolEntities())
       2: {
       3:     var department = (from d in context.Departments
       4:                         where d.Name == "English"
       5:                         select d).FirstOrDefault();
       6:  
       7:     Console.WriteLine("Courses:");
       8:     foreach (var c in department.Courses)
       9:     {
      10:         Console.WriteLine("  " + c.Title);
      11:     }
      12:  
      13:     department.Courses.Add(new Course { Title = "Grammar", Credits = 3});
      14:  
      15:     // Save new entities.
      16:     int recordsAffected = context.SaveChanges();
      17:     Console.WriteLine(
      18:         "Saved {0} entities to the database.",
      19:         recordsAffected);
      20: }
  6. 執行Console專案。
  7. 執行結果如下:

    image
  8. 實際查詢Course資料表確實資料的確有被新增至資料庫。

    image

 

【參考資料】