The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 .NET 4.5 的 ASP.NET MVC 4 網站使用 Scaffold 範本

各位可能曾經在 ASP.NET MVC 4 新增控制器且使用 Scaffold 範本時,遇到如下圖的錯誤訊息,這個錯誤訊息非常的奇怪,但真正令我疑惑的是,我自己在企業教學或在補習班教學的時候,在一班裡都會有 20% ~ 30% 的學員遇到,而我自己卻從來沒遇到過,所以之前都認為是「電腦出了問題」,換一台就好了,直到最近,我才真正找到原因,接下來就看我怎樣解決這個問題。

'xxx' 不是指定之 'xxx' 類別的一部分,而且無法修改 'xxx' 類別以新增 'DbSet<xxx>' 屬性 (例如,'xxx' 類別可能位於已編譯的組件中)。

這個錯誤的中英文訊息如下:

'xxx' is not part of the specified Entity class, and the Entity Class could not be modified to add a 'DbSet<xxx>' property to it. (For example, the Entity class might be in a compiled assembly)

'xxx' 不是指定之 'xxx' 類別的一部分,而且無法修改 'xxx' 類別以新增 'DbSet<xxx>' 屬性 (例如,'xxx' 類別可能位於已編譯的組件中)。

 

首先,我先從網站剛開始新增專案的時候講起,從下圖你可以看到,我們在新增專案時,可以選擇 .NET Framework 目標版本,在我的電腦裡,由於預設是選擇 .NET Framework 4 目標版本,但由於補習班上課教學的電腦比較多人在用,很難控管每台電腦的 Visual Studio 2012 預設值,只要你不小心選擇用 .NET Framework 4.5 目標版本來建立 ASP.NET MVC 4 Web 應用程式專案,就會遇到本篇文章所提的問題。

以下就是可行 (但不完美) 的應變措施 (Workaround):

1. 加入控制器,如下圖示 ( 點圖可放大 )

2. 設定基本參數外,最重要的是,把 資料內容類別 (Data context class) 選中的這個類別名稱,後面括號的部份給移除掉,如下圖示:

所以會變成以下這樣,然後再點選「加入」按鈕,讓 Scaffold 範本自動新增控制器與所有相關檢視頁面

3. 由於新增的過程,Visual Studio 2012 會幫你建立一個新的且重複的 資料內容類別 (Data context class),因此你必須手動將該檔案移除才行,接著專案就可以正常編譯與執行了。

雖然用今天介紹的這種方法來建立控制器來說有點麻煩,而且用最新版的 Visual Studio 2012 Update 1ASP.NET and Web Tools 2012.2 都依然如此!

補充說明:後來發現 KKBruce 也寫過【ASP.NET MVC 3-4無法新增CONTROLLER】這篇文章,文中提到此問題是因為 VSCommands for Visual Studio 2012 擴充套件的關係造成的,我測試過後發現,似乎真的是這樣。不過,相較於 VSCommands for Visual Studio 2012 帶來的優點與 Bugs 相比,我還是選擇不要停用該套件,因為我們不會每天都在新增 Controller,所以這個 Workaround 應該還是有點價值,就等待 VSCommands for Visual Studio 2012 新版修正相容性問題囉! (^_^)

 

如何在 .NET 4.5 的 ASP.NET MVC 4 網站使用 Scaffold 範本 (YouTube 錄影操作)

 

相關連結