实体框架核心递归包含问题

时间:2020-08-19 00:03:36

标签: c# .net-core entity-framework-core

我有一个包含列表的实体。而且每个列表项都有对我实体的引用。

public class Pack
{
   public Guid Id {get; set;}
   public string Name {get; set;}
   public List<Media> Medias {get; set;}
}

public class Media
{
   public Guid Id {get; set;}
   public string Name {get; set;}
   public Guid PackId {get; set;}
   public Pack Pack {get; set;}
}

如您所见,这是经典的一对多关系。 我想从包括Packs的数据库中获取Medias,因此我编写了以下代码:

public List<Pack> GetPacks(){
   return _dbContext.Pack.Where(x=>x.IsActive == true).Include(x=>x.Medias).ToList();
}

当我收到包含Packs的{​​{1}}时,我就遇到了递归联接的问题。 我得到MediasPacks的信息,但是每个Medias都再次引用了Media。结果如下:

Pack

简而言之,当我在选择{ //pack Name: ... Medias: [{Id: ..., Pack: {Name: ... Medias: [{.. Pack: { ... Medias... } 时包括Medias时,我遇到了递归引用问题。

这是什么原因?

1 个答案:

答案 0 :(得分:1)

在您的[JsonIgnore]类的Pack属性上方添加Media

[JsonIgnore]
public Pack Pack { get; set; }

使用查询时,结果为

[{
    "id":"555d42a1-914e-4976-119b-08d84400ba5a",
    "name":"My Package",
    "medias":
    [{
        "id":"db406c89-ea4b-4e55-6621-08d84400ba50",
        "name":"New Media",
        "packId":"555d42a1-914e-4976-119b-08d84400ba5a"
    }]
}]

因此,您仅包含PackId,而不包含整个Pack