使用Nhibernate在外键上应用条件

时间:2012-12-06 08:08:30

标签: c# nhibernate

我正在尝试在客户实体的外键上应用条件,即Orders,我只想加载IsCancelFlag为false的订单。(结果将是customer类型的客户对象,并且它包含一组Order对象)但是在迭代返回的结果时,我可以看到客户下的所有订单,无论其是否被取消。是否可以在nhibernate中应用外键条件

        ICriteria _criteria= session.CreateCriteria<Customer>();
        _criteria.Add(Expression.Eq("CustomerId", 12));
        _criteria.CreateAlias("FKorders","FKorders");
        _criteria.Add(Expression.Eq("FKorders.IsCancelFlag", false));
        return _criteria.UniqueResult<Customer>();

1 个答案:

答案 0 :(得分:1)

你的物业名称似乎已经成熟,但也许你想要

var query =
    from c in session.Query<Customer>()
    from o in c.Orders
    where o.IsCanceled
    select new { Customer = c, Order = o }

var results = query.AsEnumerable()
    .ToLookup(a => a.Customer, a => a.Order);

这将返回ILookup<Customer, Orders>。 NHibernate不会返回具有部分初始化订单的客户,因为这将是一个损坏的模型,并且更改跟踪将被破坏。