4

OK、これは私が解決するための興味深く、最も重要な緊急の問題です...他の人がそれをきちんと理解するために、私はよく説明された投稿をするために自分自身を伸ばしました。


オブジェクトモデル

だから私はこのシンプルで簡単で「美しい」モデルを念頭に置いています。最初の写真を参照してください。(無視できますがPathEntry、私の状況には関係ありません。)

アイデアは、MediaFeedItem所有するということです:

  • コレクションThumbnailFileEntriesThumbnailFilesプロパティからアクセス可能)
  • 最大1つのraw FileEntryMetadataFileプロパティ)および
  • 最大1 MediaFileEntryMediaFileプロパティ)

これらの最後の3つのエンティティタイプをファイルエンティティと呼びます。

ご覧のとおり、私はとからの両方ThumbnailFileEntryを継承しています。それについては議論しないでください。(今のところ)これは、設計のストーリーの終わりの側面の1つであり、両方のエンティティタイプは後で成長し続けます。MediaFileEntryFileEntry

EDMXモデル図

これにより、ファイルエンティティからへの関係によって引き起こされるポリモーフィックな関連付けに関して、すぐにいくつかの重要な問題が発生しますMediaFeedItem

最初に観察することは、派生 ファイルエンティティThumbnailFileEntryおよびMediaFileEntry)からプライマリエンティティへのナビゲーションプロパティを削除したことMediaFeedItemです。

MediaFeedItem_MediaFileアソシエーション

これを行うのは、基本クラスで定義されているプロパティをすでに継承しているためFileEntryです。ご覧のとおり、これらの関連付けの最後にある役割は削除しません。

MediaFeedItem_MetadataFileアソシエーション


リレーショナルモデル

オブジェクトモデルを生成してRDBの世界にマッピングするために(TPH / TPCに対して)非常に概念的に優れたTPT戦略を使用します。

モデルを設計するためにEDMXモデルデザイナーであるEF5-rcを使用し、DbContextAPIを使用したいDbContextとPOCOを生成するためにEF5DbContextGeneratorを使用しています。

ご覧のとおり、EFツールを使用してデータベースモデルを適切に生成できます。

DBモデル図


問題

新しいMediaFeedItemをロードして保存すると、次のエラーが発生します。

System.InvalidOperationException:多重度制約に違反しました。リレーションシップ「MediaFeedModel.MediaFeedItem_MetadataFile」のロール「MetadataFile」の多重度は1または0..1です。

私は何が間違っているのですか?

4

1 に答える 1

2

問題を見ると、1つ目立つことがあります。FileとMediaFeedItemの間のFK関係が必要です(つまり、ファイルにはMediaFeedItemが必要です)が、Fileの拡張バージョンを使用している場合は、おそらくこれは望ましくありません。

私があなたがやりたいと思うことは、次のいずれかです。

  • MediaFeedItem_FileEntryの多重度を0..1--0..1に変更して、どちらの端でも不要になるようにします
  • あなたのmetadataFileタイプを処理するための新しい拡張タイプを作成し、ベースタイプとMediaFeedItemの間の直接参照を削除します

個人的には、2つ目は、MetadataFileの実際の型を作成するため、問題に対するより洗練された解決策だと思います。

発生しているように見えるのは、拡張タイプを作成しようとしているが、基本タイプは実際にはメタデータファイルではないということです。

于 2012-06-30T02:46:40.307 に答える