2009-05-01 2 views
3

몇 가지 추가 속성을 사용하여 Linq-to-Sql 엔터티를 확장하려고합니다. 이것들은 기본 SQL View의 데이터를 기반으로 "계산 된"속성입니다. 예를 들어, 확장 된 Age 필드를 계산하는 데 사용되는 Date of Birth 필드가 있다고 생각하십시오.linq to SQL SQL보기로 OnLoaded()?

OnLoaded() 메서드를 확장하여 엔터티 클래스를 확장하려고했습니다.

컴파일 타임 오류가 발생하지만 생성 할 수 없다는 메시지가 나타납니다. 내 LTS 엔티티 클래스의 디자이너 코드를 검사했는데 예상되는 확장 점에 대한 부분 정의가 없습니다.

다른 LTS 엔티티 클래스 몇 개를 확인했으며 확장 점이 있습니다. 볼 수있는 유일한 차이점은 테이블이 아닌 SQL 뷰에서로드되지 않은 것입니다. SQL보기에서로드 할 때 "로드 됨"이벤트에 연결하는 방법이 있습니까?

TIA!

답변

4

내가이 기본 키를 가지고 있지 않은 것을 발견 : 여기에 시대 (Geekpedia 소스)를 계산하는 방법에 대한 몇 가지 논리의

public partial class [The Name of the Entity] 
{ 
    public int Age 
    { 
     get 
     { 
     return CalculateAge(this.DateOfBirth); 
     } 
    } 
} 

: 여기

는 패턴의 예 내 Linq - 투 - SQL 엔티티 클래스에 지정된. 기본 키를 지정하지 않고 엔티티 클래스에서 생성 된 확장 메서드가 없다고 생각합니다. 디자이너를 통해 LTS 엔티티 클래스 정의에 기본 키를 지정하면 OnLoaded() 이벤트를 확장 할 수있었습니다.

1

속성을 사용하여이를 수행 할 수 있습니다. 엔티티와 이름이 같은 부분 클래스를 만드십시오. 추가하는 속성이나 메서드는 자동으로 엔터티의 일부가되며 해당 멤버를 사용할 수 있습니다.

public static int CalculateAge(DateTime BirthDate) 
{ 
    int YearsPassed = DateTime.Now.Year - BirthDate.Year; 
    // Are we before the birth date this year? If so subtract one year from the mix 
    if (DateTime.Now.Month < BirthDate.Month || 
      (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day)) 
    { 
     YearsPassed--; 
    } 
    return YearsPassed; 
} 
+0

그래, 내가 실제로하는 계산이 나이를 계산하는 것보다 더 많은 작업을 수행하고 속성이 호출 될 때마다 다시 계산하지 않으려 고했기 때문에 이것을 피하려고했습니다. 나이를 이미 계산했는지 확인하기 위해 수표를 가지고 알아볼 수는 있지만 모든 종류의 "if (myValue! = null)"수표로 내 코드를 "오염시키지"않기를 바랬습니다. – Brian