-
27-10-2019 - |
質問
これは多かれ少なかれ一般的な質問であり、特に特定のORMや言語に関するものではありません。この質問は、ORMの好みに関係なく発生します。
多くの関係をマッピングする場合、仲介テーブルを不明瞭にしたり、中間テーブルをモデルの一部にすることができます。仲介テーブルが関係を超えて貴重なデータを持っている場合、マッピングをどのように処理しますか?
次の表を検討してください。
CaseWorker (id, first_name, last_name)
CaseWorkerCases (case_worker_id, case_id, date_opened, date_closed)
Case (id, client_id, field_a, field_b)
プログラマーとして、私は本当にむしろできるでしょう:
CaseWorker.Cases
よりも
CaseWorker.CaseWorkerCases.Cases
一方では、テーブルのケースワークマーサには有用なデータが含まれており、中間テーブルを隠すことで、そのデータへのアクセスが便利ではありません。一方、中間テーブルをナビゲートしなければならないと、ケースにアクセスするという一般的なタスクが厄介に見えます。
1つのソリューションは、モデルの中間テーブルを公開し、ケースワークオブジェクトにラッパープロパティを機能させることです。何かのようなもの:
public IEnumerable<Case> Cases
{
get{return (from caseWorkerCase in this.CaseWorkerCases
select caseWorkerCase.Case);}
}
しかし、それも間違っているようです。
解決
私はあなたの回避策が間違っているとは思わない。これらのモデルの複雑さをコーディングする必要があります どこか.
この正確なトピックに関するブログ投稿があります: プロパティとの多くの関係
他のヒント
多くのマッピングは、中間テーブルを使用した2つの1対多数のマッピングの単なる表記の略語であると考えています。関係に独自の属性がない場合にのみ機能します。ただし、特定のドメインの理解が向上するにつれて、通常、属性を添付するためには、多くのマッピングを分解する必要があることが通常わかります。したがって、最近の私の通常のアプローチは、常に1対多数のマッピングを使用して最初から使用することです。
所属していません StackOverflow