瘦:在将图表序列化为JSON时,由于循环引用问题,我试图禁用导航属性的急切加载。
我有这些课程:
public class Province
{
public ICollection<City> Cities { get; set; }
}
public class City
{
public Province Province { get; set; }
}
当我想要获得一系列城市时,我提供了以下内容:
set.Include(e => e.City.Province);
最终发生的事情是它按照预期加载到省份的所有东西,但它也加载了所有省份的城市。这导致序列化期间的循环引用,因为在我的基本集合中返回的相同的引用也存在于各省。
我对显式加载的期望是City.Province
会有引用,但City.Province.Cities
将为null。相反,.Cities
渴望加载数据,我不希望这样。
我最终尝试的是保留引用:
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.Objects;
这允许我的JSON序列化,但现在客户端必须处理像[{$id:1, name:"SomeCity"}, {$ref:1}]
这样的数组。我想找到重建参考文献的方法,但我认为最好完全避免使用循环引用。
答案 0 :(得分:0)
实体框架已设置,以便所有引用自动相互了解。你可以尝试一些事情。
使用.AsNoTracking()(在.ToList()之前)。它最终可能会加载所有级别的所有数据,但我认为它会删除循环引用。
创建存储您想要的关系并以这种方式映射到它的Dtos / Models。
在序列化之前,您必须遍历子项并直接将父引用设置为null。然后它将打破循环数据。