天天看点

使用EF主外键关联循环引用报错

错误提示

序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

解释报错原因

 根据我们不同的需要,我们会在不同的时候选择序列化和反序列化,从而得到我们想要的对象或者字符串

返回json数据的时候报错,报错的原因是序列化报错,原因是主外键有相同的字段,会读取相同的值,所以循环引用报错

解决报错方法

1:就是在返回结果集的时候加上这样一句代码

 DBcontext.Configuration.ProxyCreationEnabled = false;   关闭循环引用

2 :我就只拿我需要的字段,不需要的字段,我就不拿。自己单独把需要的字段拿出来 不要全部查询出来

在另外写一linq查询语句就好

 var data = BasicRes.Select(

                p=>new

            {

                p.name,

                p.sex,

                p.idNumber,

                p.receivemode,

                p.myidentity,

                p.position,

                p.oldworkplace,

                p.nowworkplace,

                p.isrecord,

                total,

                Rows=BasicRes.Count

            });

这样就不会出现读取重复的字段进行循环引用报错

建议使用第二种解决方案,因为第一种解决方案会关闭一下EF的特有方法

总结:

该错误就是EF读取时读取了相同的字段导致报错,我们只需要单独按界面字段显示要求读出数据就不会出现循环引用法人错误