繁体   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