1

スレッド、投稿、およびタグを備えたフォーラム システムがあるとします。構造は 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> TagsThread クラスのパーシャルに" " プロパティを追加する必要がありますか?

正しいタグを取得するには、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 プロパティを使用できないと思います。これは、リスト内の各スレッドに対してデータベース呼び出しをトリガーするためです。

4

1 に答える 1

0

SubSonic をしばらく使用した後、これが最善の方法だと思います。大規模で複雑なオブジェクト グラフには、Entity Framework の方が適しているようです。

于 2012-07-18T15:57:08.490 に答える