2009-07-15 2 views
28

가정하자 나는 다음과 같은 특성을 가진 직원 객체가 있습니다. 평범한 비즈니스 객체에서, 나는 속성에 그것을 단순히 코드화 하겠지만 클래스가 재생성되어야한다면 이것은 아마도 지워질 것입니다.계산 된 속성은

데이터베이스 엔터티에 매핑하는 과정을 거치지 않고이를 구현할 수있는 EF 표준 방법이 있습니까?

답변

50

실제로. 별도의 파일을 만듭니다 (예 : EmployeeExtension.cs). 이 파일에서

다음 코드를 넣습니다

public partial class Employee 
{ 
    public decimal Salary 
    { 
     get { return Hours * Wage; } 
    } 
} 

디자이너가 알고 있기 때문에 SQL과 엔티티 프레임 워크 클래스는, 당신은 많은 파일을 통해 정의를 분할 할 수 있도록하는 부분 키워드로 생성되는 LINQ에 기본 소스 파일을 계속 자동 생성하여 덮어 쓰지 않는 클래스에 멤버를 추가하려고합니다.

+0

우수! 그림자 수업을 만들고 있었는데 완전히 고통 스러웠습니다. 감사합니다 –

+1

이것은 실제 데이터 모델에서 정의되지 않았기 때문에 Linq와 엔티티에서는 작동하지 않습니다. * .edmx에서 계산 된 필드를 정의하는 방법이 있습니까? – AaronLS

+0

"작동하지 않는 것"보다 구체적 일 수 있습니까? 데이터베이스 수준에서 계산 된 값을 가진 열을 참조하는 경우 완전히 다른 짐승입니다. – JoshJordan

7

정확하게 기억한다면 EF로 만든 클래스가 부분적입니다. 그래서 당신은 아마도 다른 파일 다른 부분 클래스를 포함 이상이

public single Salary 
{ 
    get 
    { 
     return this.Hours * this.Wage; 
    } 
} 

트릭을 할해야 속성을 구현합니다 (같은 네임 스페이스 물론 같은 클래스 명)을 추가 할 수 있습니다 (그 싱글이 널이 아닌 경우, 마음을!)

5

엔티티 클래스에서 속성을 구현할 수 있습니다. 엔티티 프레임 워크는 부분 클래스를 생성하여 클래스에 멤버를 추가 할 수있게합니다. 다음과 같은 클래스를 코드에 추가하십시오.

public partial class Employee { 
    public Single Salary { 
    get { return Hours*Wage; } 
    } 
} 
6

처음에는 'Argo의 답변'을 얻을 수 없었습니다. 주위에 조금 놀고 난 후에 나는 (WCF에서와 같이) 다음 속성이 모두 잘 작동하는 속성을 장식하면 알았다.

[global::System.Runtime.Serialization.DataMemberAttribute()] 

''Argo의 지침에 따라 별도의 파일 (예 : EmployeeExtension.cs)을 만듭니다. 이 부분은 설명 된대로 부분 표시해야합니다. 이 도움이 ...

public partial class Employee 
{ 
    [global::System.Runtime.Serialization.DataMemberAttribute()]  
    public decimal Salary  
    { 
     get { return Hours*Wage; } 
    } 
} 

희망 :

이 파일에 다음 코드를 넣습니다.

2

이것은 나를 위해 Entity Framework 5에서 작동하지 않습니다. 나를위한 해결책은 [NotMapped] 특성을 사용하는 것이 었습니다. 자세한 내용은 Code First DataAnnotations