ef entity转json引起的Self referencing loop
问题简介:前段时间做项目时,将取到的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,因为也会把导航属性全部取出。暴露了其他数据信息。
ef entity转json引起的Self referencing loop的更多相关文章
- JSON.NET的Self referencing loop detected with type的原因以及解决办法
模型中有循环引用是很常见的.例如,以下模型显示双向导航属性: : public class Category : { : public Category() : { : Products = new ...
- .NET JSON 转换 Error ” Self referencing loop detected for type“
在进行实体转换为Json格式报错如下图: Self referencing loop detected for property 'md_agent' with type 'System.Data.E ...
- EF关于报错Self referencing loop detected with type的原因以及解决办法
1)具体报错 { "Message": "出现错误.", "ExceptionMessage": "“ObjectContent` ...
- EF(Entity Framework)多对多关系下用LINQ实现"NOT IN"查询
这是今天在实际开发中遇到的一个问题,需求是查询未分类的博文列表(未加入任何分类的博文),之前是通过存储过程实现的,今天用EF实现了,在这篇博文中记录一下. 博文的实体类BlogPost是这样定义的: ...
- c#使用 Newtonsoft.Json 将entity转json时,忽略为null的属性
c#使用 Newtonsoft.Json 将entity转json时,忽略为null的属性,直接在属性上加下面的特性 [JsonProperty(NullValueHandling=NullValue ...
- c# json 序列化时遇到错误 error Self referencing loop detected for type
参考网址:http://blog.csdn.net/adenfeng/article/details/41622255 在写redis缓存帮助类的时候遇到的这个问题,本来打算先序列化一个实体为json ...
- Json Self referencing loop detected
Self referencing loop detected......的错误 解决方案: 1 增加 [JsonIgnore] 过滤关联,使其不参与序列化. 这个方法简单粗暴.但是你就没办法获取关 ...
- [转载]灵动思绪EF(Entity FrameWork)
很久之前就想写这篇文章了,但是由于种种原因,没有将自己学习的EF知识整理成一片文章.今天我就用CodeFirst和ModelFirst两种方式的简单案例将自己学习的EF知识做个总结. 在讲解EF之前, ...
- EF(Entity Framework)通用DBHelper通用类,增删改查以及列表
其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...
随机推荐
- day 0314函数的进阶
1.空间:内置空间,全局空间,局部空间. 内置空间:空间存放python解释器,为我们提供了方便的名字:input,print,str,list,tuple 三个空间的加载顺序: 内置空间>&g ...
- 转:手把手教你如何玩转Solr(包含项目实战)
原文地址:手把手教你如何玩转Solr(包含项目实战) 参考原文
- 为单实例数据库配置ASM
环境配置沿用搭建RAC的环境配置 配置ASM可以在数据库软件安装之前进行,也可以在安装完数据库软件配置数据库前进行 [root@rac01 Packages]# cd /etc/yum.repos.d ...
- linux里source、sh、bash、./有什么区别(转)
add by zhj: 主要不同是,source是在当前shell中执行脚本,而sh, bash, ./是在当前shell的child shell中执行脚本 原文:http://www.cnblogs ...
- 1_02 Vue Slot
slot 插槽 插槽内容 const component ={ template: ` <div> <slot></slot> </div> ` } n ...
- 关于分页Pagination的使用
在这个例子当中,用的是ssm框架整合,并且用的是Pagination实现分页 先来看一下分页中用到的类的源码 Paginable.java package cn.itcast.common.page; ...
- w命令 查看系统负载
linux命令 w [root@localhost snmp]# w :: up :, user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN ...
- String[]与List<String>的相互转换
String[]转List String[] arr = new String[]{"a","b","c"}; List<String ...
- 20181223 python 使用Beautiful Soup
(这篇,没什么营养价值) 怎么说呢! 爬虫吧!把html页面进行解析得到有效数据,而beautiful soup 能快速格式化页面再进行方法对数进行提取,存入想要存入的DB中. from bs4 im ...
- 简明 ASP.NET Core 手册2018
https://windsting.github.io/little-aspnetcore-book/book/ 中文版 https://nbarbettini.gitbooks.io/little- ...