2

Memberから派生したClientAuthorの2 つのクラスがあります。それらはMemberに何も追加しませんが、セマンティクスと後で拡張できるように別のクラスを用意することを好みます。ロールに基づいて区別します。AuthorAuthorRoleメンバーシップを持つメンバーであり、ClientClientRoleメンバーシップを持つメンバーです。Discriminator 列でプレーンなバニラ TPH マッピングを使用すると、MemberがClientAuthorの両方になることができなくなります。

これを解決するために私が確認できる唯一の方法は、ClientRepositoryAuthorRepositoryにマッピングを行わせることです。私の db コンテキストは幸いなことに継承を認識していませんが、ここではパフォーマンスが低下します。これらを Client インスタンスにマップします。

これを行う他の方法はありますか?

4

1 に答える 1

0

EF の TPH マッピングは、クライアントがメンバーであり、作成者がメンバーであると言いますが、クライアントであり作成者であるメンバーが存在することは決してありません。クライアントから著者に、またはその逆に役割を変更するメンバーさえ存在することはできません。

2 つの派生クラスを同じテーブルに格納する場合は、TPH とディスクリミネーターを使用する必要があります。EF は、前述の規則が確実に守られるようにします。これらのルールのいずれかがシナリオで有効でない場合、.NET でさえインスタンスのタイプをクライアントからメンバーに変更できないため、継承はとにかく悪い設計です。

現在の設計を維持したい場合は、クライアント リポジトリとカスタム クラスへの追加レベルのマッピングを使用する必要があります。これは、EF がリレーションを通じて TPH 継承を駆動できないためです。EF では、関係を変更することはできますが、既に作成されたインスタンスのタイプを変更することはできないため、このような継承は存在できません。

于 2012-04-23T21:10:52.487 に答える