问题简介:前段时间做项目时,将取到的entity往Redis cache里存放时报多重引用的错误。

Self referencing loop detected for property 'CheckItemCategory' with type。

一、问题详情

1、chectItemCategory与CheckItem实体介绍

2、我们用ef取了List<CheckItemCategory>,以Json的形式存放到redis中。但在JsonConvert.SerializeObject时报多重引用错误。

3、细追原因,NewtonSoft.Json 对Entity(CheckItemCategory)序列化时,会遍历CheckItemCategory中的所有属性进行转换。当遇到导航属性CheckItems时,会向数据库继续请求checkItems数据(ef延迟加载)。而在转换checkItem实体时,checkItem实体里面又有CheckItemCategory导航属性。CheckItemCategory与checkItem互相引用,多重引用死循环问题。

二、解决方案

1、方法1。推荐用这个。

在entity的checkItems导航属性上加[JsonIgnore]特性来忽略该属性。

关于newtonsoft.json高级用法参见 http://www.cnblogs.com/yanweidie/p/4605212.html

2、方法2。删除CheckItemCategory类中的checkItems属性。但是此方法治标不治本,(1)本来ef配置两者外键关系时需要用

(2)在具体应用时可能已经在用他们的关系延迟加载,进行业务操作。

(3)在取checkItem转json时也会将CheckItemCategory取出一并转到json中去,比较坑。

三、思维延伸

在用webapi返回结果时,千万不要直接返回entity,因为也会把导航属性全部取出。暴露了其他数据信息。

最新文章

  1. node05-fs
  2. mybatis 简单使用示例(单独使用):
  3. wifi diplasy流程介绍
  4. Effective Objective-C 2.0之Note.04
  5. XML注入介绍--XXE,XEE,xpath等
  6. SQL SERVER 2008 nvarchar 转换 deciaml 失败(nvarchar to decimal)
  7. host字段变复杂了
  8. ssm+maven 框架整合
  9. 自定义bootstrap样式-9行样式自定义漂亮大气bootstrap导航栏
  10. hadoop2.6.0实践:A02 问题处理 util.NativeCodeLoader: Unable to load native-hadoop library for your platform
  11. RunLoop总结:RunLoop 与GCD 、Autorelease Pool之间的关系
  12. 2015年CSDN博客排名第一名,何方神圣?
  13. ashx导出dataTable为Excel
  14. 章节四、3-While循环-DoWhile语句
  15. python类的使用
  16. 基于redis的 分布式锁 Java实现
  17. NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
  18. sometimes we should use &quot;disable fork&quot; instead of &quot;disable block_name&quot;
  19. js页面百分比缩放
  20. Python 死循环和嵌套循环

热门文章

  1. OC中如何优化代理是否响应某个方法
  2. Aspects源码解析(转载)
  3. 封装一个axios请求后台的通用方法
  4. webpack4入门配置
  5. html5页面与android页面之间通过url传递参数
  6. EXPLAIN执行计划中要重点关注哪些要素(叶金荣)
  7. 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询
  8. Advising controllers with the @ControllerAdvice annotation
  9. 为什么要使用 Docker(二)
  10. .NET Core 使用 Kestrel