[英]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.