1

EF 4.2(データベースファースト)とDBContext T4テンプレートを使用して、POCOクラスを作成しています。これは非常にうまく機能しますが、抽象基本クラスの問題に困惑しました。

抽象プロパティを持つカスタム抽象クラスから継承するには、T4で生成されたPOCOクラスが必要です。

//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クラスのプロパティが「オーバーライド」としてマークされていないため、コンパイラがこれをビルドしないことです。LINQ 2 SQLには、エンティティプロパティの継承修飾子を変更するオプションがありましたが、EFモデルデザイナーでこのオプションを見つけることができません。

EFモデルデザイナーとT4テンプレートに特定のプロパティをオーバーライドとしてマークするように指示する方法はありますか(もちろん、生成されたC#コードを変更できますが、この変更はT4が再度実行されると上書きされます)?これをコンパイルして動作させる他の方法はありますか?

どうもありがとう、〜saxx


更新1:タイプミスを修正しました。

4

1 に答える 1

2

EF モデル デザイナーには、継承修飾子を変更するオプションはありません。ただし、いくつかの回避策があります。

  1. プロパティの名前が特定のパターンに一致する場合に異なる反応を示す (override キーワードを追加する) T4 モデルで、規則に基づくシステムを構築します。
  2. 基本クラスではなくインターフェイスを使用し、静的クラス/拡張メソッドでロジックを定義します。
  3. EF デザイナーで関連するプロパティの名前を変更し、オプションでアクセス修飾子をプライベートに設定します。名前が変更されたプロパティを反映させることで、抽象プロパティを実装します。
于 2012-02-15T10:08:09.450 に答える