包含关系(PK,FK)的EF实体不能被Json-ed?

时间:2013-01-04 07:59:41

标签: json entity-framework

我已经构建了一个非常简单的数据库模式

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

**Areas**:
AreaId(PK)
AreaName

**Severities**:
SeverityId(PK)
SeverityName

**Assignees**:
AssigneeId(PK)
AssigneeName

我创建了实体模型,在TicketController中我试图检索和Json Tickets表中的数据。

[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的原因,我得到了“循环引用错误”。 我在表/实体关系中看不到循环引用!!

在Kendo文档中,我读到了这个

  

如果您决定直接使用Kendo UI JavaScript库,   返回JSON很简单。您只需要定义一个控制器   方法并在返回结果上调用this.Json。提供.NET即可   序列化您的回复,这就是它的全部内容。

上述所有意味着实际上我不能使用具有主键/外键的合理数据库模式的Json实体吗?

提前完成

2 个答案:

答案 0 :(得分:1)

尝试禁用延迟加载。可能是它正在尝试将DB中的所有内容序列化为JSON。

答案 1 :(得分:1)

创建一个平面Model类并将模型传递给Json和Grid。您必须手动填充模型比您在此处尝试的更多,但是拥有您稍后将发现的模型还有其他好处。循环引用是因为EF类的导航属性。在MVC中,模型不是指数据模型类,而是指您创建的新类。如果做得好,新模型应该完成大部分工作,验证,翻译等。控制器只是传递信息,视图只是呈现。希望这有帮助!