데이터베이스에서 계산 된 값을 푸싱하는 데 다음 기술을 사용했습니다.get {} 값을 통해 데이터베이스 값 가져 오기
public class Invoice
{
public ICollection<Line> Lines {get;set;}
[AlwaysUpdate]
public Decimal Total { get { return this.CalcTotal; } set{} }
public Decimal CalcTotal
{
get
{
return this.Lines.Sum(l => l.Price * l.Quantity);
}
}
}
이 기술은 내 데이터베이스에 송장의 총을 저장할 수 있습니다, 및 선 전혀 변경하는 경우, 총이 자동으로 업데이트 내 [AlwaysUpdate]
속성 덕분에 저장됩니다.
나는과 같이 청구서를 조회 할 경우 :
_repository.Invoices.Select(i => i.Total);
엔티티 프레임 워크 가서 DB의 총 가져오고 CalcTotal
를 호출하지 않습니다. 내가 할 경우
그러나이 :
_repository.Invoices.ToList().Select(i => i.Total);
엔티티 프레임 워크는 CalcTotal
를 호출합니다.
보통 이것은 원하는 동작이지만 특정 쿼리에 문제가 있습니다. ToList
을 사용하여 모든 레코드를 메모리로 가져와야하지만 모든 항목에 CalcTotal
을 호출하고 싶지는 않습니다.
내 작은 해킹을 변경하여 항상 CalcTotal
을 호출하지 못하도록 지원하는 방법이 있습니까?