2013-01-04 50 views
0

我建立一個非常非常簡單的數據庫模式包含關係(PK,FK)的EF實體不能被Json編輯?

**Tickets**: 
TicketId (PK) 
AreaId (FK) 
SeverityId (FK) 
AssigneeId (FK) 

**Areas**: 
AreaId(PK) 
AreaName 

**Severities**: 
SeverityId(PK) 
SeverityName 

**Assignees**: 
AssigneeId(PK) 
AssigneeName 

我創建了實體模型,並在TicketController我試圖檢索和JSON的門票表裏面的數據。

[HttpPost] 
public ActionResult Index([DataSourceRequest]DataSourceRequest result) 
{ 
var tickets = db.Tickets.Include(t=> t.Areas).Include(t=> t.Assignees).Include(t=> t.Severities) 

DataSourceResult result = tickets.ToDataSourceResult(request); 

Return Json(result); 
} 

對於我的JSON的結果,以便將其傳遞給KendoUiGrid的觀點我不明白一個道理,我得到的「循環引用錯誤」。 我在我的表格/實體關係中看不到循環引用!

在劍道文檔如果你決定直接使用劍道UI JavaScript庫, 返回JSON很簡單我讀這

。您只需要定義一個控制器 方法並在返回結果上調用this.Json。 .NET提供了可以將您的響應序列化的 ,這就是它的全部內容。

以上所有意思是說,實際上我不能使用主鍵/外鍵來理智的JSON實體嗎?

Thanx預先

回答

1

創建一個平面模型類並將模型傳遞給Json和Grid。你將不得不比你在這裏試圖做的更手動地填充模型,但是有一個你將在後面發現的模型的其他好處。循環引用是由於您的EF類的導航屬性。在MVC中,模型並不意味着數據模型類,而是您創建的新模型。完成正確的新模型應該完成大部分工作,驗證,翻譯等。控制器只是傳遞信息,視圖只是呈現。希望這可以幫助!

+1

此外,將多個模型和任何列表添加到新模型並傳遞到創建時查看,這將是一個ViewModel。使用使用這些下拉菜單。 –

1

嘗試禁用延遲加載。可能是它試圖將數據庫中的所有內容序列化爲JSON。

+0

Thanx!但是,如果我禁用延遲加載,我想我不會有下拉列與FK值...(?) – PanosPlat

+0

您需要加載所有的FK值使用'包括' –

+0

查看更多詳細信息延遲加載和渴望加載.http://codetuner.blogspot.in/2011/07/entity-framework-differed-loading-lazy.html –