2012-02-15 41 views
0

我們正在使用NHibernate 3.2以下爲高度可擴展的性能敏感的系統,一個簡單的1對多映射流利mappings.TheNHibernate的智能預取在1到許多場景

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之前的所有內容都將被標記爲歸檔/數據倉庫seperately。

我們如何在NHibernate中配置預取。我們無法找到一個例子。

回答

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(); 
    } 
} 
移除
相關問題