ASP.NET Web API - Entity Framework(EDMX) Navigation Property引發的JSON物件循環參考錯誤

Entity Framework(EDMX) Navigation Property

上圖是一個ASP.NET Web API專案,從範例Northwind資料庫裡加入兩張有關連性的資料表到Entity Framework(EDMX)裡,很正常的,它會加入巡覽屬性(Navigation Property),當我們什麼都不修改,直接加入API Controller,例如,ProcutsController和OrderDetailsController然後建置、啟動、測試Web API服務會立即得到一個錯誤。

JSON的錯誤訊息與產生原因

完整訊息如下

小心,不要被Google Chrome偷偷吃掉你的記憶體

Google Chrome的快是要付出代價

Google Chrome 19記憶體使用情況

這是開啟Google Chrome 25,預設只連上blog.kkbruce.net所使用的記憶體情況,一開啟就吃了496.4 MB的記憶體(Firefox 19是161.3 MB,IE 10是138.5 MB。)。可以看得出來,Google Chrome的快是用你電腦的記憶體換來的,好或壞,這看個人。

為何說偷偷吃掉記憶體

先看第二張圖:

Google Chrome 19記憶體使用情況2

ASP.NET MVC 3-4無法新增Controller

問題的來龍去脈

Visual Studio 2012在安裝【Web Tools 2012.2】正式版更新之後,ASP.NET MVC 3與ASP.NET MVC 4(C#與VB.NET)專案,如果使用【Database first + Entity Framework】會無法新增MVC Controller與API Controller。

Database first示意圖

  1. 新增範例資料庫
    新增Northwind範例資料庫
  2. 新增Entity Framework實體資料模型(EDMX)
    新增Entity Framework實體資料模型(EDMX)

新增MVC / API Controller之英文版錯誤訊息:

新增MVC / API Controller之英文版錯誤訊息
'ProjectName.ClassName' is not part of the specified 'ProjectName.???Entities' class, and the 'ProjectName.???Entities' class could not be modifed to add a 'DbSet<ProjectName.ClassName>' property to it.(For example, the 'ProjectName.???Entities' class might be in a compiled assembly.)

新增MVC / API Controller之中文版錯誤訊息:

新增MVC / API Controller之中文版錯誤訊息
'ProjectName.ClassName'不是指定之'ProjectName.???Entities'類別的一部分,而且無法修改'ProjectName.???Entities'類別以新增'DbSet<ProjectName.ClassName>'屬性(例如,'ProjectName.???Entities'類別可能位於已編訪的組件中)