1

假设我有一个包含主题、帖子和标签的论坛系统。结构与 StackOverflow 相同:Threads 与 Posts 是一对多关系,Tags 与 Threads 是多对多关系。

(简化)表:

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 类的一部分吗?

为了检索正确的标签,我应该执行两个查询:一个获取 ThreadTags,一个获取标签本身:例如

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 回答