1

I했습니다 manay 일대 두 개체 간의 관계 : 카테고리 < -> 항목EF - 모든 중첩 된 개체를로드하는 열망 로딩을 방지하는 방법에

public class CategoryMaster 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual List<SubCategoryMaster> SubCategories { get; set; } 

    public List<ItemMaster> Items { get; set; } 
} 

public class ItemMaster 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 

    public List<CategoryMaster> Categories { get; set; } 
} 

나는 명시 적 부하 관련 항목하려고 할 때마다 모든/특정 범주는 해당 항목에 나에게 그 캘리포니아에

  • 관련 항목을

    • 모든 관련 항목

    • 관련 카테고리를 제공합니다 tegories 등등 ... 중첩/순환 참조
      db.CategoryMaster 
           .Include(x=>x.Items) 
           .Include(x=>x.SubCategories.Select(y=>y.Items)) 
           .ToList(); 
      

    ) (Json.Encode와 *의 .cshtml에 JSON으로 직렬화 동안 그러므로 아래에 오류가 발생

    ;

    A circular reference was detected while serializing an object of type 'GoGreen.Data.Entities.SubCategoryMaster'. 
    

    나는 속성 수준에서 게으른 로딩, 나는 그것이 시간의 시점에서 모든 하위 항목 (순환 참조를)로드 기대하고 있지 않다 장애인했습니다 때문에. 관련된 모든 레벨 1 기록 즉 카테고리 및 관련 항목을로드하는 방법이 있습니까?

    Related question - 그러나 두 가지 방법 중 하나를 선택하지 않으려 고합니다.

    참고 : EF가 이와 같이 작동하는 이유를 알고 싶습니다. 나에게 버그가있는 것 같다.

  • +0

    답변을 확인하고 도움이되는지 알려주세요. –

    +0

    Json.Net을 사용하여 json serializer를 교체하고 참조 루프 처리를 설정해야합니다. –

    답변

    0

    첫 번째 방법 : 당신은 당신이 [ScriptIgnore]를 사용하여 직렬화에서 제외하지 않으려는 속성 위의 속성을 추가 할 수 있습니다 부분 클래스를 생성하고 개체가 자동

    두 번째 방법

    를 생성하는 경우 귀하의 사용자 정의를 추가 할 수 있습니다 만들기 당신은이 모델을 선택하고 설정 당신의 재산

    EFcontext.Tabel.include(x=>x...).Select(x=>new MyModel { ... }); 
    
    +0

    이 방법에는 아무런 문제가 없지만 EF 프레임 워크 자체에서 일부 수정이 예상되므로이 작업을 선호하지 않습니다. – RollerCosta

    0

    한 가지 해결 방법 및 :-) 객체 로딩 후 및 직렬화하기 전에 나를 죽이지 마세요보기에 필요한 유일한 특성을 가진 모델, 그냥로드를 설정 순환 참조를 일으키는 객체는입니다.. 나는 그것을 시험해보고 매력처럼 일했다.