0

我们正在使用具有流畅映射的 NHibernate 3.2。以下是高度可扩展的性能敏感系统中的简单一对多映射

    public class Root
    {
        public Root()
        {
            Childs = new List<Child>();
        }
        public virtual int ID { get; set; }
        public virtual IList<Child> Childs { get; set; }
        public virtual int LastChildID { get; set; }
        public virtual int CurrentChildID { get; set; }
    }

    public class Child
    {
        public virtual int ID { get; set; }
        public virtual Root Root { get; set; }
        public virtual string Name { get; set; }
    }

当我们在几乎所有情况下从存储库中加载它时,我们只对由 CurrentChildID 定义的 Current Child 感兴趣,并且希望从数据库中一次性读取它以及根而不是其他 Child 记录。如果我们对剩余的孩子感兴趣,我们只需要加载 LastChildID 和 CurrentChildID 之间的记录 - 这样做的原因是我们可能有数百个孩子作为根,并且 LastChildID 之前的所有内容都将被标记为归档/数据仓库处理分开。

我们如何在 NHibernate 中配置预取。我们只是找不到一个例子。

4

1 回答 1

0

我会更改类并实现 getter 和 setter 以使它们在所有三个属性中保持一致的添加和删除

public class Root
{
    public Root()
    {
        Childs = new List<Child>();
        LastChilds = new List<Child>();
    }

    public virtual int ID { get; set; }
    public virtual IList<Child> AllChilds { get; private set; }
    public virtual IList<Child> ActiveChilds { get; private set; }
    public virtual Child CurrentChild { get; set; }
}

然后

public class RootMap : ClassMap<Root>
{
    public RootMap()
    {

        HasMany(r => r.AllChilds);

        HasMany(r => r.ActiveChilds)
            .Where("archived = false"); // the childs know if they are archived otherwise it will get more complex

        References(r => r.CurrentChild, "LastChildID")
            .Not.LazyLoad();
    }
}
于 2012-02-16T08:48:58.340 回答