1

クラスはEntity Frameworkクラスから継承し、継承されたクラスのマッピングを使用してDBに永続化できますか? 「Self-Tracking Entity」クラスから派生しようとして SaveChanges を試行すると、Type にマッピングがないことを示すエラーが発生しました。Type が Entity クラスから継承されたので、これが機能するために何らかの形でエンティティ マッピングも継承できることを願っていました。これを機能させることができた人はいますか?

私がサポートしようとしているシナリオは、エンティティとマッピングを含むアセンブリを参照する別のアセンブリでエンティティ オブジェクトを拡張することです。パーシャル クラスとマッピングは、エンティティ オブジェクトを含むアセンブリにコンパイルされます。したがって、部分クラスを使用してこれを達成することはできません。

4

2 に答える 2

5

いいえ、EDMX (およびセルフ トラッキング エンティティ) では不可能です。派生型を保存する場合は、それもマップする必要があります。生成されたコードに何かを追加する必要がある場合は、エンティティ クラスの独自の部分部分を使用します。

驚くべきことに、コード ファースト (EFv4.1 および DbContext API) で可能であるように見えますが、そのような場合、セルフ トラッキング エンティティを使用することはできません。データベースをチェックしたところ、コードファーストでも不可能です。TPH 継承を暗黙的に作成し、派生クラスを別のエンティティとしてマップします。

于 2011-04-26T22:16:35.250 に答える
1

データまたはデフォルト機能の一部を本当にオーバーライドする必要がない限り、代わりにクラスを拡張することをお勧めします。EF クラスは として宣言されているため、partial別のコード ファイルを作成し、その中にカスタム メソッドまたはプロパティをドロップできます。次に、すべてのオブジェクトの永続性とカスタム コードを取得します。

public partial class MyEntity
{
   //Extend the base object
   public string FormattedName
   {
      get
      {
         return String.Format("Lookie this! {0}/{1}", this.SomeString, this.SomeInt);
      }
   }
}

編集- 明確化に応じて、別のアセンブリで EF クラスを変更する必要がある場合の最善の策は、残念ながらエンティティ クラスをメンバーとして受け取るラッパー クラスを作成することです。次に、ボックス化されたエンティティの公開部分にアクセスするためのすべての新しい機能を記述します。新しいプロパティの永続性は得られませんが、それは得られませんでした。

于 2011-04-26T22:15:04.797 に答える