我已经构建了一个非常简单的数据库模式
**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实体吗?
提前完成
答案 0 :(得分:1)
尝试禁用延迟加载。可能是它正在尝试将DB中的所有内容序列化为JSON。
答案 1 :(得分:1)
创建一个平面Model类并将模型传递给Json和Grid。您必须手动填充模型比您在此处尝试的更多,但是拥有您稍后将发现的模型还有其他好处。循环引用是因为EF类的导航属性。在MVC中,模型不是指数据模型类,而是指您创建的新类。如果做得好,新模型应该完成大部分工作,验证,翻译等。控制器只是传递信息,视图只是呈现。希望这有帮助!