복잡한 관계 유형을 열심히로드하는 데 어려움이 있습니다. 내 엔티티를 고려하십시오.
public class User
{
public string UserName { get; set; }
}
public class Ownership
{
public User Owner { get; set; }
public Device Device { get; set; }
}
public class Device
{
public License License { get; set; }
}
모든 항목이 별도의 테이블에 있다고 가정합니다. 필수가 아닌 모든 규칙 코드를 생략했습니다. 필요할 때 더 게시 할 수 있습니다.
내 질문 :
var result = return context.Ownerships
.Include(o => o.Device.License)
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device).ToList();
그러나 이로 인해 null
모든 장치에 대한 가치있는 라이선스가 제공됩니다. 그러나 다음과 같이 라이선스를 정의하면 :
public class Device
{
public virtual License License { get; set; }
}
그리고 다음과 같이 쿼리하십시오.
var result = return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device).ToList();
작동하지만 (라이센스는 null
장치 용이 아님 ) 기본적으로 지연로드가 아닙니다. 엔티티는 나머지에 걸쳐 제공되므로 직렬화를 통해 필요하지 않은 라인을 통해 많은 데이터를 쿼리하는 각 장치에 대한 라이센스 정보를 얻습니다.
힌트가 있습니까?
해결책
var result = return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device)
.Include(d => d.License)
.ToList();
당신이하고있는 일의 투영에 대한 작품 만 포함 시키십시오.
귀하의 경우에는 포함을 정의 Ownership
하지만 포함이 정의 Device
되지 않은 투영 을 정의하고 있습니다 (예 : 포함 .Include(o => o.Device.License)
되지 않음).
이 작업을 수행 할 수 있습니다 (하지만 테스트하지는 않았습니다).
return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device)
.Include(d=>d.License)
.ToList();
쿼리하는 방식을 바꾸지 않으면 예를 들면 다음과 같습니다.
return context.Devices
.Include(d => d.License)
.Where(d => d.Ownerships.Any(o=>o.Owner.UserName == userName))
.ToList();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다