2013-02-12 2 views
0

데이터베이스에서 계산 된 값을 푸싱하는 데 다음 기술을 사용했습니다.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을 호출하지 못하도록 지원하는 방법이 있습니까?

답변

1

이 훌륭하지 않지만 수

public class Invoice 
{ 
    public ICollection<Line> Lines {get;set;} 

    private decimal _dbTotal; 

    [AlwaysUpdate] 
    public Decimal Total { get { return this.CalcTotal; } set{ _dbTotal = value; } } 

    public Decimal DBTotal { get { return _dbTotal;} } 

    public Decimal CalcTotal 
    { 
     get 
     { 
      return this.Lines.Sum(l => l.Price * l.Quantity); 
     } 
    } 
} 

DBTotal 항상 데이터베이스에 저장된 전체를 반환합니다, 그래서 당신은 DBTotal에 대한 쿼리를 작성할 수?

관련 문제