我有一个数据库模式,存储一个“页面”与许多“修订”。就像一个简单的维基。NHibernate:有时我想要一个项目,其他时间我想要他们全部
90%的时间,当我加载一个页面时,我只是对最新版本感兴趣。但是,有时候我想要所有修订。
使用NHibernate,我可以将页面映射到修订版,并告诉它延迟加载。但是,当我访问最新的修订版时,它将加载所有其他修订版 - 这是对I/O的极大浪费。
我的页面类目前类似于:
public class Page
{
public Page()
{
Revisions = new HashedSet<Revision>();
}
public virtual ISet<Revision> Revisions { get; private set; }
public virtual Revision LatestRevision
{
get { return Revisions.OrderByDescending(x => x.Revised).FirstOrDefault(); }
}
public virtual Revision Revise()
{
var revision = new Revision();
// ...
revision.Entry = this;
revision.Revised = DateTime.UtcNow;
Revisions.Add(revision);
return revision;
}
}
我怎么会对此建模,这样当页面加载LatestRevision自动加载,但其他版本是延迟加载,如果,例如,我试图迭代它们?
我特别喜欢一种与LINQ to NHibernate一起工作的解决方案,但是使用ICriteria(如果必须的话,甚至SQL)也足够好。
我刚试过这个,但看起来我只能使用一个公式,如果它返回一个简单的类型。对于我的复杂修改对象,我需要为它编写一个IUserType - 这会让我失去调用数据读取器的路径,这似乎打败了使用NH的目的:) – 2009-09-11 14:56:15
虽然很高兴知道。我不知道它仅限于简单的类型。 – 2009-09-11 21:38:39