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

各位可能曾經在 ASP.NET MVC 4 新增控制器且使用 Scaffold 範本時，遇到如下圖的錯誤訊息，這個錯誤訊息非常的奇怪，但真正令我疑惑的是，我自己在企業教學或在補習班教學的時候，在一班裡都會有 20% ~ 30% 的學員遇到，而我自己卻從來沒遇到過，所以之前都認為是「電腦出了問題」，換一台就好了，直到最近，我才真正找到原因，接下來就看我怎樣解決這個問題。  
  
!['xxx' 不是指定之 'xxx' 類別的一部分，而且無法修改 'xxx' 類別以新增 'DbSet<xxx>' 屬性 (例如，'xxx' 類別可能位於已編譯的組件中)。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2a2d02a664781c91e648-image_1918.png)

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

> **'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 應用程式專案，就會遇到本篇文章所提的問題。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/79bd7b4ff2373c624b46-image_1919.png)

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

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

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/84c5664746e29e7cfa7d-image_thumb_152.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f97eccb154020d418d82-image_1920.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b526c8924fff0057a514-image_1921.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/12e25d4c4acfddac1129-image_1922.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5b54b3f6a02ddaee3ef5-image_1923.png)

雖然用今天介紹的這種方法來建立控制器來說有點麻煩，而且用最新版的 [Visual Studio 2012 Update 1](https://visualstudio.microsoft.com/vs/older-downloads/) 與 [ASP.NET and Web Tools 2012.2](http://www.asp.net/vnext/overview/fall-2012-update/aspnet-and-web-tools-20122-release-notes-rtw) 都依然如此！

**補充說明**：後來發現 [KKBruce](http://blog.kkbruce.net/) 也寫過【[ASP.NET MVC 3-4無法新增CONTROLLER](http://blog.kkbruce.net/2013/03/aspnet-mvc-3-4-can-not-add-new-mvc-and-api-controller.html#.UUaKKhdBNc7)】這篇文章，文中提到此問題是因為 [VSCommands for Visual Studio 2012](http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8/view/Discussions) 擴充套件的關係造成的，我測試過後發現，似乎真的是這樣。不過，相較於 [VSCommands for Visual Studio 2012](http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8/view/Discussions) 帶來的優點與 Bugs 相比，我還是選擇不要停用該套件，因為我們不會每天都在新增 Controller，所以這個 Workaround 應該還是有點價值，就等待 [VSCommands for Visual Studio 2012](http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8/view/Discussions) 新版修正相容性問題囉！ (^\_^)

<object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/egvhaExfBDo?hl=en&amp;hd=1"><embed src="http://www.youtube.com/v/egvhaExfBDo?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></object>

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

**相關連結**

-   [如何在 .NET 4.5 的 ASP.NET MVC 4 網站使用 Scaffold 範本](http://youtu.be/egvhaExfBDo "http://youtu.be/ddYUp2hV12U") (YouTube 錄影操作)
-   [ASP.NET MVC 3-4無法新增CONTROLLER](http://blog.kkbruce.net/2013/03/aspnet-mvc-3-4-can-not-add-new-mvc-and-api-controller.html#.UUaKKhdBNc7)
-   [VSCommands 11 for Visual Studio 2012](http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8)
-   [ASP.NET MVC 4 – How to use a Database First EF in a MVC controller](http://jefferytay.wordpress.com/2013/02/19/asp-net-mvc4-how-to-use-a-database-first-ef-in-a-mvc-controller/)
-   [Unable to create controller in .NET 4.5 & ASP.NET MVC 4](https://connect.microsoft.com/VisualStudio/feedback/details/781528/unable-to-create-controller-in-net-4-5-asp-net-mvc-4) - 輸入者 Will 保哥
