EntityFramework 序列化类型为XX的对象时检测到循环引用

在使用EF5进行.NET项目开发时,遇到因外键关系引起的JSON序列化循环引用错误。解决方案有两种:一是针对代码优先,通过添加[JsonIgnore]特性忽略导航属性;二是针对数据库优先,在DAL层设置db.Configuration.ProxyCreationEnabled = false,避免创建代理对象。这两种方法都能有效防止序列化错误。
摘要由CSDN通过智能技术生成

最近某些巧合下重拾.net 使用ef5 开发一个小型项目。

在项目里遇到 ef 外键关系导致 解析json时出现循环引用的错误。

自己查询相关资料总结了两条最好的解决方案,如下。


★第一种 如果是代码优先推荐这个

引用 Newtonsoft.Json

ef实体类中外键导航属性
[JsonIgnore]  //加上这个特性 忽略json中的外键关系
public virtual ICollection<score> scores { get; set; }  


具体实现

protected string VCOperationManBind(HttpContext context)
{
       List<OperationMan> list = pmbll.GetList();
       var result = JsonConvert.SerializeObject(list);
//泛型直接转换成json 不会报循环引用的错误
       return result;
}


★第二种  因为我使用的是数据库优先,所以我用这个方案,简单粗暴

public List<OperationMan> GetList()
{
    db.Configuration.ProxyCreationEnabled = false;
//有需要忽略外键导航属性的  直接在DAL层获取数据方法时标明
    return db.OperationMan.ToList();
}


★其它,无非就是返回数据过滤掉外键属性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值