簡體   English   中英

FluentNhibernate,檢索部分 Object Graph

[英]FluentNhibernate, retrieve partial Object Graph

因此,我將調用存儲庫以使用 FluentNHibernate 檢索復雜 object 圖的根 object。 但是對於某些子級別的對象,我不想檢索所有元素,而只想檢索日期參數等於特定條件的那些元素。 在下面的代碼中,我希望通過 OrderTime 字段以這種方式過濾較低級別的 Order object。

這意味着我想檢索所有用戶組的所有用戶,但每個用戶的訂單 object 應僅包含來自特定日期或日期范圍的訂單。

那么關於如何檢索此 object 圖,我有哪些選擇? 我不想延遲加載,我只想指定幾個不同的檢索條件,這些條件永遠不會改變。 所以它們可以是存儲庫的獨立功能,就像最后建議的那樣。 但是我將如何編碼這些方法,如何指定這些條件?

對象:

public class UserGroup
{
    public int Id;
    public IList<User> Users;
}

public class User
{
    public int Id;
    public string Name;
    public IList<Order> Orders;
}

public class Order
{
    public int Id;
    public decimal Price;
    public System.DateTime OrderTime;
}

存儲庫:

public class UserGroupRepository
{    
    public List<UserGroup> GetAll()
    {
        using (ISession session = FNH_Manager.OpenSession()) {
            dynamic obj = session.CreateCriteria(typeof(UserGroup)).List<UserGroup>();
            return obj;
        }
    }
}

潛在的新存儲庫方法:?

public List<UserGroup> GetAll_FilterOrderDate(System.DateTime _date)
{
}

public List<UserGroup> GetAll_FilterOrderDate(List<System.DateTime> _dates)
{
}

這真的取決於你想對訂單做什么。

您是否有理由需要查詢聚合根? 按日期查詢實際訂單是否有意義? 所以你最終會得到:

session.QueryOver<Order>().Where(t => t.OrderDate > ...);

如果您的關聯設置正確,您仍然可以導航到用戶。

就我個人而言,我發現存儲庫模式有點限制,寧願使用查詢對象,所以你最終會得到類似的東西:

queryService.FindAll<UserGroup>(new GetAllByFilterOrderDate(DateTime.Now));

但是,如果存儲庫的概念對您有用,那么一定要堅持下去,但這意味着您將嘗試強制您的 object model 進入這個以“用戶組”為中心的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM