我正在为 ASP.NET MVC 3 使用库(Telerik)。
我对需要通过 AJAX 返回一些数据的所有功能都有疑问:
我正在使用 EF4 连接我的数据库,并且我已经(并且需要)两种方式的导航属性(想象一下,一个用户有一些帖子,一个帖子有一个用户)。
问题是该库正在使用 JavaScriptSerializer,它使用 JSON 对数据进行编码。
我得到的错误
序列化“System.Data.Entity.DynamicProxies.Employee_34048F4F6A98297F826C798A27640C7383E95E8EA8282EC8A5F738FA0C77CBC3”类型的对象时检测到循环引用。”
例外,这是对的,因为父级引用了它的子级,而子级引用了它的父级。
我已经找到了一些解决方法,但没有什么能让我完全满意:
- 使用数据服务器绑定:不能,该功能必须在 ajax 中工作(它是网格的分页器,当页面滚动到最后时加载下一个元素)
- 使用匿名对象:不灵活,因为如果我在数据库中添加了一个字段,我必须将它添加到我所有的匿名对象中,另外,如果我需要有一个我想要的子集合,那很无聊还为此子列表的所有元素创建对象。
- 使用 ViewModel:几乎同样的问题,如果我还有一个字段,我必须在所有 viewModel 上添加这个字段,并且我必须为我的所有 60 个视图创建一个视图模型,其字段与我的模型完全相同,...
- 使用 NonSerializedAttribute :我不知道如何放入生成 POCO 对象的 T4 模板,我不确定它是否会起作用:有时主要对象是子对象,有时是父对象,空关系必须成为另一个。
我在使用 WCF 时遇到了几乎相同的问题,并且我创建了一个知道处理循环引用的序列化,我们可以在这里做同样的事情吗?或者有没有办法管理这个?
如果没有,我想最好的方法是使用“ViewModel”,但是有没有办法加速这些创建?像一个通用对象,它在构造函数中接受 EF 对象并删除循环引用?还要别的吗?
非常感谢你