2016-07-14 8 views
0

ASP.NET Core 1.0을 만드는 중이고 RC1에서 동일한 응용 프로그램을 만들었습니다. EF 코어로 관련 테이블 데이터를 쿼리하는 데 문제가 있습니다.ASP.NET CORE 1.0 리포지토리 관련 데이터로드 중 EF CORE

이전에는 EF7을 사용했으며 필드에 데이터가 있는지 여부에 관계없이 모든 것이 잘 작동했습니다. 내 문제는 내가 사용할 때 모든 레코드의 컬렉션을 반환하지 않는다는 것입니다. Include. 나는 https://docs.efproject.net/en/latest/querying/related-data.html에 샘플을 사용하여 내 nuget 콘솔 내 모델을 만들어 :

비계 - DbContext "; 데이터베이스 = 블로깅; Trusted_Connection = TRUE; 서버 = (localdb) \ mssqllocaldb를" Microsoft.EntityFrameworkCore.SqlServer -OutputDir 모델

그리고이 모델을 가지고 :

public partial class Complaint 
{ 
    public Complaint() 
    { 
     Checklist = new HashSet<Checklist>(); 
     Clnotes = new HashSet<Clnotes>(); 

    } 

    public int CompId { get; set; } 
    public string FileNum { get; set; } 
    public DateTime? ReceivedDt { get; set; } 
    public DateTime? CompletedDt { get; set; } 


     public virtual ICollection<Checklist> Checklist { get; set; } 
    public virtual ICollection<Clnotes> Clnotes { get; set; } 
    } 

GETALL()에 대한 나의 저장소 :

public IEnumerable<Complaint> GetAll() 
    { 
     try 
     { 
      return _context.Complaint 
       //.Include(t => t.Checklist) 
       //.Include(cl => cl.Clnotes) 
       .ToList(); 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError("Could not get complaint with checklist", ex); 
      return null; 
     } 
    } 

질문

왜이다를 관련 테이블을 포함하여 EF7을 사용할 때 모든 단일 r에 대한 데이터가 포함되었습니다. 데이터베이스의 ecord. EF 코어의 경우 검사 목록이나 clnotes 테이블을 포함하면 하나의 레코드 만 표시됩니까? 관련 표를 포함하지 않으면 모든 불만 사항이 표시됩니다.

답변

0

동일한 문제가있었습니다. 왜 이런 식으로 작동하는지 모르겠지만 필드를 포함시킨 후 선택하면 해결됩니다. 이 같은 것을보십시오 : 당신은 probablly IActionResult 같은 다른 뭔가를 IEnumerable에서 방법의 유형을 변경해야합니다

return _context.Complaint 
    .Include(t => t.Checklist) 
    //.Include(cl => cl.Clnotes) 
    .Select(c => new { 
     c.CompId, c.FileNum, c.Checklist, // c.Clnotes 
    ) 
    .ToList(); 

.

0

당신은 순환 참조를 방지하기 위해 다음 줄을 추가해야

services.AddMvc().AddJsonOptions(options => 
      { 
       options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
      });