OK、これは私が解決するための興味深く、最も重要な緊急の問題です...他の人がそれをきちんと理解するために、私はよく説明された投稿をするために自分自身を伸ばしました。
オブジェクトモデル
だから私はこのシンプルで簡単で「美しい」モデルを念頭に置いています。最初の写真を参照してください。(無視できますがPathEntry
、私の状況には関係ありません。)
アイデアは、MediaFeedItem
所有するということです:
- コレクション
ThumbnailFileEntries
(ThumbnailFilesプロパティからアクセス可能) - 最大1つのraw
FileEntry
(MetadataFileプロパティ)および - 最大1
MediaFileEntry
(MediaFileプロパティ)
これらの最後の3つのエンティティタイプをファイルエンティティと呼びます。
ご覧のとおり、私はとからの両方ThumbnailFileEntry
を継承しています。それについては議論しないでください。(今のところ)これは、設計のストーリーの終わりの側面の1つであり、両方のエンティティタイプは後で成長し続けます。MediaFileEntry
FileEntry
これにより、ファイルエンティティからへの関係によって引き起こされるポリモーフィックな関連付けに関して、すぐにいくつかの重要な問題が発生しますMediaFeedItem
。
最初に観察することは、派生 ファイルエンティティ(ThumbnailFileEntry
およびMediaFileEntry
)からプライマリエンティティへのナビゲーションプロパティを削除したことMediaFeedItem
です。
これを行うのは、基本クラスで定義されているプロパティをすでに継承しているためFileEntry
です。ご覧のとおり、これらの関連付けの最後にある役割は削除しません。
リレーショナルモデル
オブジェクトモデルを生成してRDBの世界にマッピングするために(TPH / TPCに対して)非常に概念的に優れたTPT戦略を使用します。
モデルを設計するためにEDMXモデルデザイナーであるEF5-rcを使用し、DbContextAPIを使用したいDbContextとPOCOを生成するためにEF5DbContextGeneratorを使用しています。
ご覧のとおり、EFツールを使用してデータベースモデルを適切に生成できます。
問題
新しいMediaFeedItemをロードして保存すると、次のエラーが発生します。
System.InvalidOperationException:多重度制約に違反しました。リレーションシップ「MediaFeedModel.MediaFeedItem_MetadataFile」のロール「MetadataFile」の多重度は1または0..1です。
私は何が間違っているのですか?