スレッド、投稿、およびタグを備えたフォーラム システムがあるとします。構造は StackOverflow と同じです。スレッドは投稿に対して 1 対多の関係を持ち、タグはスレッドに対して多対多の関係を持ちます。
(簡略化された) テーブル:
Thread
------
ThreadID int PK
Title varchar(200)
Tag
----
TagID int PK
Name varchar(50)
ThreadTag
-----------
ThreadTagID int PK
ThreadID int FK
TagID int FK
そのため、SubSonic ActiveRecord テンプレートが私のクラスを生成してくれます。
コード
フロント ページでは、スレッドのリストを取得し、これらのそれぞれに関連するタグのリストを添付する必要があります。投稿数はさておき、タグを取得してこのオブジェクト グラフを作成する最良の方法は何ですか?
次のようなスレッドを取得した場合:
var threadQuery = Thread.All().Skip(x).Take(n);
var threadList = threadQuery.ToList();
IList<Tag> Tags
Thread クラスのパーシャルに" " プロパティを追加する必要がありますか?
正しいタグを取得するには、2 つのクエリを実行する必要があります。1 つは ThreadTags を取得するためのもので、もう 1 つはタグ自体を取得するためのものです。
var tagLinks = (from t in threadQuery
join l in ThreadTag.All() on t.ThreadID equals l.ThreadID
select l).ToList();
var tags = (from t in threadQuery
join l in ThreadTag.All() on t.ThreadID equals l.ThreadID
join tg in Tag.All() on l.TagID equals tg.TagID
select tg).ToList();
...そして、これらのリストを使用してタグを正しい Thread.Tags リストに並べ替えますか?
より良い方法はありますか?外部キーを使用して SubSonic によって生成された IQueryable プロパティを使用できないと思います。これは、リスト内の各スレッドに対してデータベース呼び出しをトリガーするためです。