次のような関係をモデル化するために、エンティティとして公開する必要のある多対多のマッピング/ピボット テーブルがあります (この質問Model Entity Framework many-many plus shared relationshipに従って):
ここで、'stock' Entity Framework 多対多関係のナビゲーション プロパティに存在する EF コレクションの列挙/追加/削除機能をエミュレートしたいと思います。どうすればいいですか?
データのパフォーマンスを低下させることなくクエリを実行できることを望んでいます。明らかに、ピボット テーブルをブリッジするために次を実装するだけでは、この目標は達成されません。また、コレクションを管理するための EF 規則にも従いません。
public partial class Composition {
public IEnumerable<Anthology> Anthologies {
get {
return CompositionAnthologies.Select(e => e.Anthology);
}
}
public void AddAnthology(Anthology anthology)
{
CompositionAnthologies.Add(new CompositionAnthology() {
Anthology = anthology,
Composer = Composer
});
}
}
例を挙げたり、出発点を推奨したりできますか? (私は現在モデル ファーストを使用していますが、モデル ファーストは急速に二流市民になりつつあるように見えるため、解決策としてコード ファーストに切り替えることに注意してください。)
編集:関係と制約に関する詳細情報は次のとおりです。
多対多の関係には、すべての Anthology.Compositions (および Composition.Anthology) に対して Composition.Composer == Anthology.Composer を強制するために必要な手動で作成された FK リレーションを含むバインディング ComposerId 列を含むジャンクション テーブル ("CompositionAnthologies") があります。 . ジャンクション テーブルが保持するリレーションは次のとおりです。
つまり、アンソロジーに関連するコンポジションがあってはなりませんが、コンポーザーが異なります。