2009-05-12 26 views
0

たとえば、次のデータベースモデルを考えてみましょう。Entity Frameworkとの継承継承

  • USERTABLE(ID、ユーザ名)
  • TextContentTable(ID、名前、説明、CreatedByUserId、ModifiedByUserId、のTextContent)
  • ImageContentTable(ID、名前、説明、CreatedByUserId、ModifiedByUserId、ImageContent)

次のオブジェクトモデルを作成します。しかしそれは可能ですか?

  • BaseEntity(ID)
  • DescriptiveEntity(名前、説明):例えば BaseEntity
  • TrackedEntity(CREATEDBYModifiedBy):DescriptiveEntity
  • ユーザ(ユーザ名):BaseEntity
  • TextContent(テキスト):TrackedEntity
  • ImageContent(Image):TrackedEntity

私はあなたが私の表記法を理解してほしいが、それは個々のテーブルTextContentTable & ImageContentTableに(太字で表示)関連付けをマッピングすることは可能でしょうか?

Thanx事前に。

+1

私はあなたの表記を理解すると思います。 CreatedByとModifiedByを両方のテーブルにどのようにマップできますか?私がそれを読んでいる方法は、ImageContentTableだけがModifiedByUserIdを持っていますか?それは間違いだったのでしょうか? –

+0

Oepsが間違ってしまった質問を編集します。 TextContentTableにはModifiedByUserId列も必要です。 – JSC

答えて

1

現在の出荷バージョンのEntity Frameworkでは、このアプローチが良いアイデアであるとは思えません。 TextContentのような型がBaseEntityのような型から継承する場合、基本型と同じエンティティセットを持つ必要があります。この質問で概説した戦略では、アプリケーションのすべてのエンティティが同じエンティティセットを持つことになります。私はそれがあなたが望むものであるかどうかはわかりません。

ただし、インターフェイスを使用しても同じ効果が得られます。たとえば、idプロパティを公開するIEntityというインターフェースを持つことができます。もう一つのインターフェース、ITrackedEntityはCreatedByとModifiedByを公開する可能性があります。その他

これは理想的ではありませんが、現在のところ十分です。実際には、これらを実装するためにT4テンプレート経由でcodegenを使用します。

次のバージョンのEntity Frameworkには、この継承パターンを単一のエンティティセットを必要とせずに実装しやすくする機能があります。

+0

あなたのanwserのためにすべての最初のオフをオフにします。これは現在の出荷バージョンでは不可能であることを理解していますが、私はMSがこれらの種類のオブジェクトモデルについて考えることを願っています。私はインターフェイスで自分のことをやろうとしますが、これは理想とはほど遠いものですが、私は今、それと一緒に暮らすことができると思っています;-)これらのインターフェイスを実装するT4テンプレートについて言及していますが、 – JSC

+0

T4ものは簡単です。インターフェイスのサポートは、すべてのクラスで同じです。そのため、カットアンドペーストするのではなく、クラス名の配列があり、T4を使用して配列内のすべてのクラスのコードを生成します。インタフェースを実装する部分クラスを生成します。EFの次のバージョンでは、EF自体が再びT4を使用してコードジェンをカスタマイズすることができます。 –