在 2013-11-01 時,ASP.NET MVC 官方網站增加了新的教學課程「Getting Started with EF 6 using MVC 5」,
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc
這一個教學課程比較進階一點,不適合給完全沒有接觸過 ASP.NET MVC 的朋友,而如果已經接觸過甚至已經開始使用 ASP.NET MVC 開發但是尚未接觸過 Code First 的朋友,這個課程就有些挑戰。
如果想要研習「Getting Started with EF 6 using MVC 5」課程的朋友,我會建議一定要先看過「Getting Started with EF 5 using MVC 4」這個課程,因為新課程的內容是承襲前一個版本的課程內容,所以先看過前一版本的課程後再研習新課程內容。
Getting Started with EF 5 using MVC 4
課程內容如下:
這個課程所提供的範例程式檔,可以在以下的頁面裡取得,
http://code.msdn.microsoft.com/ASPNET-MVC-Application-b01a9fe8
下載範例檔案後,解開壓縮檔內容並且開啟位於「C#」目錄裡的「CU10.sln」方案檔(使用 VS2012),
於 Visual Studio 2012 開啟這個方案後,重建方案式一定會出現錯誤的,在錯誤訊息裡就有告訴我們應該麼做,
開啟 NuGet Package Manager 後就可以看到上面出現訊息「此方案遺漏一些 NuGet 套件,按一下以從線上套件來還原。」,就按下「還原」按鍵讓 NuGet 下載方案所需要使用的套件,
透過 NuGet Package Manager 還原套件後,再去重新建置方案就不會出現錯誤,範例的網站也能夠正常執行,
再來就是各位自己照著教學課程的內容跟著學習。
Getting Started with EF 6 with MVC 5
課程內容如下:
這個教學課程將會包含 Entity Framework 6 的新功能:
- Connection resiliency
- Command interception
- Code-based configuration
- Async
- Stored Procedures
這個教學課程的範例程式也是要到「ASP.NET MVC Application Using Entity Framework Code First in C# for Visual Studio 2012」這裡下載,但下載的位置不是頁面上方的「Download」而在 Introduction 裡有提到,
範例程下載位置:
進入連結頁面後,會看到 License 聲明,在頁面最下方有是否同意的選項,點選「I Agree」後才能夠下載範例程式檔「ContosoUniversityEF6.zip」
壓縮黨內的 ContosoUniversity.sln 方案檔為 Visual Studio 2013 所建立,所以建議使用 VS2013 開啟,開啟方案後的第一次重建方案就會透過 NuGet 套件管理員來還原專案所使用的套件,
但如果第一次重建方案並且沒有做任何修改或調整設定後就執行網站,可以進入到首頁,
但如果要執行到有存取資料庫的網頁時(ex: Students)就會出現錯誤,
這是因為我們還沒有完成 Database 的建立以及完成 Code First 的操作。
首先,先開啟 NuGet 的套件管理主控台,
接著輸入「Update-Database」並且執行,就會看到 Visual Studio 開始執行 migrations,
重新執行網站並且瀏覽「Students」單元頁面就可以看到正常執行的頁面與資料,
另外在偵錯模式下,當執行到有存取資料庫的頁面時,在 Visual Studio Output 視窗裡可以看到相關 SQL Command 以及執行時間的紀錄訊息,
這是使用了 EF6 的新功能「Command Interception」,我在前面的兩篇文章也有作過說明:
初探 Entity Framework 6 - Intercepting Part.1
初探 Entity Framework 6 - Intercepting Part.2
雖然實做的方式略有不同(我是透過 NLog,範例程式是透過自己的 Logger,我是繼承 IDbCommnadInterceptor 介面,範例程式是繼承 DbCommnadInterceptor 這個類別 ),但基本的作法都是一樣的。
不繼承實作 IDbCommandInterceptor 而繼承 DbCommnad Interceptor 類別的用意是在於,當我們想要對其中的一兩個 method 做截取處理時,就只需要繼承 DbCommandInterceptor 然後再 override 原本的 method 就可以,這樣就可以不用去繼承 IDbCommandInterceptor 然後實做全部的 method。
相關連結:
Getting Started with EF 6 using MVC 5 : The Official Microsoft ASP.NET Site
ASP.NET MVC Application Using Entity Framework Code First in C# for Visual Studio 2012
以上
沒有留言:
張貼留言