假设我有一个包含帖子、帖子和标签的论坛系统。
(简化)表格:
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
为了检索正确的标签,我应该执行两个查询吗:一个获取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中。标签列表?
有更好的办法吗?我认为我不能使用SubSonic使用外键生成的IQuery属性,因为这会触发我列表中每个Threads的数据库调用。