문제

몇 가지 추가 속성으로 LINQ-to-SQL 엔티티를 확장하려고합니다. 이들은 기본 SQL 뷰의 데이터를 기반으로 "계산 된"속성입니다. 예를 들어, 연령대를 계산하는 데 사용되는 생년월일이 있다고 생각하십시오.

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

컴파일 타임 오류가 발생하지만 생성 할 수 없다고 말합니다. LTS 엔티티 클래스의 디자이너 코드를 확인했으며 예상 확장 지점에 대한 부분 정의가 없습니다.

다른 LTS 엔티티 클래스 중 일부를 확인했으며 이러한 확장 지점이 있습니다. 내가 보는 유일한 차이점은없는 것이 테이블이 아닌 SQL보기에서로드된다는 것입니다. SQL보기에서로드 할 때 "로드 된"이벤트에 연결하는 방법이 있습니까?

티아!

도움이 되었습니까?

해결책

LINQ-to-SQL 엔티티 클래스에 대한 1 차 키가 지정되지 않았다는 것을 알았습니다. 기본 키가 지정되지 않고 엔티티 클래스에서 생성 된 확장 방법이 없다고 생각합니다. LTS 엔티티 클래스 정의 (디자이너를 통해)의 기본 키를 지정하면 onloaded () 이벤트를 확장 할 수있었습니다.

다른 팁

재산을 통해이 작업을 수행 할 수 있습니다. 엔티티와 같은 이름의 부분 클래스를 만듭니다. 추가하는 속성 또는 방법은 자동으로 엔티티의 일부이며 해당 구성원을 사용할 수 있습니다.

다음은 패턴의 예입니다.

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

다음은 연령을 계산하는 방법에 대한 논리입니다 (출처 : 괴짜)

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top