2012-02-15 2 views
1

DBContext T4 템플릿과 함께 EF 4.2 (데이터베이스 우선)를 사용하여 POCO 클래스를 만듭니다. 이것은 매우 잘 작동하지만, 지금은 추상 기본 클래스에 문제를 통해 stumpled :Entity Framework 4 + DBContext T4 + 추상 기본 클래스

//my abstract base class (shortened) 
public abstract class BaseClass { 
    public abstract int? Property1 { get; set; } 
    public abstract int? Property2 { get; set; } 

    // a lot of methods that work with above properties 
} 

//my T4 generated entity (shortened) 
public partial class Entity { 
     public Nullable<int> Property1 { get; set; } 
     public Nullable<int> Property2 { get; set; } 
} 

//and a partial class to make the T4 entity inherit from my abstract class 
public partial class Entity : BaseClass { 
} 

내 문제 : 나는 내 T4는 추상적 인 속성을 가진 사용자 정의 추상 클래스에서 상속 POCO 클래스를 생성해야합니다

T4 클래스의 속성이 "재정의 (override)"로 표시되어 있지 않기 때문에 컴파일러가이를 빌드하지 않는다는 것입니다. LINQ 2 SQL에서 엔터티 속성에 대한 상속 수정자를 변경할 수있는 옵션이 있지만 EF 모델 디자이너에서이 옵션을 찾을 수 없습니다.

EF 모델 디자이너와 T4 템플릿에 특정 속성을 재정의한다고 표시하는 방법이 있습니까 (물론 생성 된 C# 코드를 변경할 수 있지만 T4가 다시 실행될 때이 변경 사항을 덮어 씁니다)? 이 컴파일을 할 수있는 다른 방법이 있습니까 &?

고마워, ~ saxx


업데이트 1 : 오타를 수정했습니다.

답변

2

EF 모델 디자이너는 상속 수정자를 변경하는 옵션을 제공하지 않습니다. 그러나 몇 가지 해결 방법이 있습니다.

  1. 속성 이름이 특정 패턴과 일치 할 때 다르게 반응하는 (override 키워드 추가) T4 모델에 규칙 기반 시스템을 구축하십시오.
  2. 정적 클래스/확장 메서드에서 기본 클래스가 아닌 인터페이스를 사용하고 논리를 정의합니다.
  3. EF 디자이너에서 관련 속성의 이름을 바꾸고 선택적으로 액세스 한정자를 비공개로 설정합니다. 이름이 변경된 속성을 반영하여 추상 속성을 구현합니다.
+0

답장을 보내 주셔서 감사합니다. 솔루션 3을 사용하는 경우 엔 Linq to Entities가 여전히 작동하는지 알고 있습니까? –

+0

해결 방법 솔루션 1을 사용하여 끝났습니다. 이것은 정말 나쁜 해킹이며, 나는 그것을 싫어합니다. (왜 내가 싫어하는지 설명하기 위해 20 줄의 코드 주석을 만들었지 만) 작동합니다. 감사. –

관련 문제