2012-03-12 45 views
3

当我使用的ASP.NET Web API与实体框架忽视的导航性能。 我将默认的序列化程序更改为JSON.NET(导致默认的DataContractSerializer完全无法使用EF)。 现在它更好(它至少工作),但仍然不完美。在发送GET请求之后,我从一个表中获得所有属性加上导航属性中的很多数据(所以基本上来自其他实体的所有数据都与我想要获得的实体有关)。 我怎样才能让它从这个实体只有序列化字段,而不是导航属性?如何序列化

感谢您的帮助

+1

我会说:禁用延迟加载和测试,如果有帮助。 – Slauma 2012-03-12 23:11:19

+0

谢谢!有效!但我不确定为什么。延迟加载基本上会延迟数据加载,所以为什么在这里导致它? – Bart 2012-03-13 09:15:47

+0

酷!我已经通过其他解释将我的评论转换为答案。 – Slauma 2012-03-13 14:11:52

回答

1

尝试禁用延迟加载。

的JSON序列化是通过你的实体的属性迭代它们序列化,因此也呼吁导航性能的吸气剂。调用导航属性的getter =触发延迟加载。加载被延迟了一段时间,但直到序列化程序到达导航属性并导致额外的数据库查询来获取然后已被序列化的子属性值。

2

禁用延迟加载有效地从JSON序列中删除关系的东西,但导航性能仍然会出现在JSON。

您可能需要从模型中删除这些导航属性,如果他们不有用你或者选择在你的控制器所需的性能。

+1

在EF 6中不做任何事情 – arviman 2014-08-18 12:22:27