양방향필수관계를 구현하려 합니다. 하지만 공식문서에서 제공하는 코드를 실행하면 Blog.BlogHeader.Blog.BlogHeader.Blog.BlogHeader… 무한루프에 빠지게 됩니다.
관계 탐색, 관계 검색 규칙 같은 다른 문서들도 찾아보았지만 무한루프에 빠지는 내용에 대해 설명하는 글이 보이지 않습니다.
BlogHader.Blog에 [JsonIgnore]특성을 주면 해결되지만 이유가 무엇인지, 원리가 무엇인지에 대한 자료를 찾을 수 없습니다.
관련된 문서를 알고계신분이 있을까요…?
//부모
public class Blog {
public int Id { get; set; }
public BlogHeader? Header { get; set; }
}
//자식
public class BlogHeader {
[Key]
[ForeignKey(nameof(Blog))]
public int Id { get; set; }
public Blog Blog { get; set; } = null!;
}
Id 프로퍼티를 기준으로 blog엔티티의 객체는 blogheader엔티티의 객체를 참조하거 blogheader엔티티의 객체는 blog엔티티의 객체를 서로 순환참조하는 형태인걸로 보이는데요… [jsonignore] 어트리뷰트를 선언하여 해결된다고 하실걸로 보아 해당 객체들을 json으로 직렬화하다가 문제가 발생하신걸로 추측됩니다.
제 추측이 맞다면
우선, 링크된 예제의 코드와 보여 주신 코드가 다르다는 점을 말씀드리고 싶습니다.
링크의 예제 코드는 아래와 같습니다
// Principal (parent)
public class Blog
{
public int Id { get; set; }
public BlogHeader? Header { get; set; } // Reference navigation to dependent
}
// Dependent (child)
public class BlogHeader
{
public int Id { get; set; }
public int BlogId { get; set; } // Required foreign key property
public Blog Blog { get; set; } = null!; // Required reference navigation to principal
}
BlogHeader의 PK로 Blog의 PK를 사용하려고 합니다.
BlogHeader는 Blog에 필수적으로 종속되는 관계이고 단 하나만 존재하기 때문에 별도의 PK를 가질 필요는 없다고 생각합니다. 이런 모습의 관계는 많이 보일텐데 EF Core의 문서에서 왜 이 내용을 다루지 않는건지도 모르겠네요…(제가 못찾고 있는걸수도…)