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