2

EFCodeFirstを使用してグラフ構造をモデル化するのに問題があります。アプリケーション内の多数の具象オブジェクトが、さまざまなタイプのエッジのいずれかに関連するノードになる可能性がある状況があります。

たとえば、2つのUserオブジェクトには関係(like、dislike、related)がありますが、それぞれが別のタイプのオブジェクト('viewed'ページ、'liked'メッセージなど)に等しく関連している可能性があります。

アプリケーション内でこれをモデル化するために、可能なすべてのノードが継承するGraphNodeの基本クラスを使用しており、各GraphNodeにはEdgeのコレクションがあります。各エッジには、SourceNode、DestinationNode、およびRelationshipType(重み付けに使用)があります。

これをデータベースファーストのストレート開発としてモデル化する方法を知っています。サロゲートキーを持つEdgeのテーブル、リンクされているオブジェクトからのPKとなるSourceObjectIDフィールドとDestinationObjectIDフィールド、タイプであるSourceObjectTypeフィールドとDestinationObjectTypeフィールドがあります。関連するオブジェクトの数ですが、サイトにはEFCodeFirstの実装が必要です。

TPT継承を使用するところまで来たので、GraphNodeIDであるPKを持つGraphNodeテーブルがありますが、これを具体的なタイプの各テーブルのPKとして使用しています。問題を引き起こそうとしている彼ら自身のPKの場所。

誰かがこれをしたことがありますか、または誰かがこれを行う方法について正しい方向に私を向けることができますか?

4

1 に答える 1

0

ご存知のように、継承はこのシナリオにはあまり適していません。

NHibernateのような他のORMは、「異種の関連付け」をすぐにサポートします。EFはそうではないので、私の解決策はこれを「サービス」レイヤー(つまり、コントローラー/ビューモデルとDbContextの間)で処理することです。

私がしているのは、任意のエンティティに関連付けられている要素(私の場合はNotesまたはComments)を格納および取得できる抽象化を作成することです。これを行うには、参照されるオブジェクトのエンティティタイプとIDを手動で保存します。

これは、要素をまだ永続的でないエンティティに関連付けたい場合を除いて、ほとんどの場合簡単です(DbContextでいくつかのコールバックを使用して処理します)

于 2012-06-08T13:12:52.603 に答える