EF 展示数据 循环引用问题解决

文章讲述了在使用layui前端框架和后端MVC配合EntityFramework(EF)时,如何处理由于主外键循环导致的查询问题。通过延迟加载和禁用代理创建来避免循环加载,以及在序列化时忽略循环引用的方法。
摘要由CSDN通过智能技术生成

框架不同 原理相同 举例使用前端框架 layui 后端mvc+EF

请添加图片描述

因为 EF模型中的主外键 有循环的关系 一般通过ef取查询表时常常引发循环问题请添加图片描述

解决方案

  1. 延迟加载导航属性 直到访问时才会去加载导航属性
  //关闭 上下文配置.是否启用针对导航属性的关系的延迟加载。导航属性的延迟加载
  db.Configuration.LazyLoadingEnabled = false;    //两者效果相似 选其一
  // 禁用加载模型的导航属性 (就不会触发主外键关系)
  db.Configuration.ProxyCreationEnabled = false;  
  //现在的plist 再去展示列表的时候 就会忽略模型的导航属性 也不会进行循环调用了
  List<PaperTypes> plist = db.PaperTypes.ToList();

需要注意的是,当ProxyCreationEnabled =false的时候,LazyLoadingEnabled是不起作用的。

  1. 使用Linq语句取结果集

linq获取结果集 就已经不是从上下文类直接获取的模型了 自然直接跳过 模型的主外键关系

  //
var plistLinq = (from p in db.PaperTypes
                 select new { 
                 p.PaperTypeId,
                 p.Name,
                 p.CreateTime,
                 p.IsDelete
              }).ToList();
  1. 忽略循环引用

序列化对象时,如果该对象的属性值也是对象,就会出现循环引用的情况
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore
在序列化对象时忽略循环引用,避免出现循环引用的问题

//实例化 jsSettings 对象
JsonSerializerSettings jsSettings = new JsonSerializerSettings();
//配置jsSettings 的ReferenceLoopHandling 属性 使其序列化时忽略 循环引用
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//返回序列化后的json数据
 return JsonConvert.SerializeObject(json, jsSettings);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值