Net Core - .Include () 루프가 발생하여 Visual Studio 디버그가 충돌합니다.

asp.net-core-mvc dbcontext eager-loading entity-framework-core visual-studio-2017

문제

내 데이터베이스는 "UsageRecord"와 "Dimension"사이에 일대 다 관계가 있습니다.

데이터베이스 다이어그램

이는 다음과 같이 모델링됩니다 (데이터베이스 우선 접근법 사용).

public partial class Dimension
    {               
        ...          
        public virtual ICollection<UsageRecord> UsageRecord { get; set; }       
    }

사용 레코드 클래스 :

      public partial class UsageRecord
        {
            public long Id { get; set; }
            ...
            public long DimensionId { get; set; }    
            public virtual Dimension Dimension { get; set; }              
        }

그래서, 내가 UsageRecords (EagerLoading)의 목록을 쿼리하면 :

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).ToList()

내가 디버그하는 동안 탐색 할 수 UsageRecord 개체 목록을 얻을 : 사용 기록

Dimension 객체가 null이며, 쿼리에 포함시키지 않았으므로이 객체가 null이라는 점에 유의하십시오.

자, 내가 그것을 포함하려고하면 응용 프로그램이 충돌합니다 :

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).Include(p => p.Dimension).ToList();

추락

Postman은 502 오류로 종료되고 VS Debug는 처음에 물음표 목록 "?"을 표시합니다. 충돌하기 전에.

이것은 Dimension 객체를 포함함으로써 첨부 된 UsageRecords 목록을 반복 한 다음 Dimension을 반복해서 반복한다는 사실 때문이라고 생각합니다.

어떻게 피할 수 있습니까?

인기 답변

LINQ 쿼리에서 결과를 검색하려면 다음과 같은 방법으로 문제를 해결할 수 있습니다.

  • 루프를 무시하도록 serializer를 구성하십시오.
  • 컨트롤러 동작을위한 뷰 모델 만들기
  • 컨트롤러 작업에서 결과 선택의 익명 유형 사용


Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow