我有一个班级:
class User
{
IDictionary<Post, DateTime> SavedPosts { get; set; }
}
将其保存到多对多表关联[用户] - &lt; [保存]&gt; - [发布]
[保存]表:
ID_USER (int)
ID_POST (int)
SAVED_ON (DateTime)
映射看起来像这样:
<map name="SavedPosts" table="[SAVES]">
<key column="ID_USER" />
<index-many-to-many column="ID_POST" class="Post" />
<element column="SAVED_ON" />
</map>
如果我这样做:
User u = db.Get<User>(1); //get user with ID = 1
Post p = db.Load<Post>(5); //load post with ID = 5
//Let's say I know that the post #5 is saved
DateTime savedon = u.SavedPosts[p];
Nhibernate执行:
SELECT ID_USER, SAVED_ON, ID_POST FROM [SAVES] WHERE ID_USER = 1
但是......如果用户有10万个已保存的帖子??!?!我不想把它全部拿走。
所以我可以这样做:
db.CreateQuery(@"select s
from User u
join u.SavedPosts s
where u.ID = :userId
and s.index = :postId")
.SetInt32("userId", u.ID)
.SetInt32("postId", p.ID)
.UniqueResult<DateTime>();
它运作正常。
但是如何更新或插入SavedPosts?每次当我在IDictionary SavedPosts上“做某事”时,它都会从数据库中加载所有数据(查看上面的SQL语句)。
“做某事”意味着:
u.SavedPosts[p] = DateTime.Now; //for update
u.SavedPosts.Add(p, DateTime.Now); //for insert
所以我满意的结果是:
我该怎么做?