QueryOver子集合提供笛卡儿产品

时间:2013-04-25 10:41:27

标签: nhibernate queryover

我有一个我试图查询的域名(省略了其他不重要的属性)和相关的映射:

// Domain:
public class Order
{
    public virtual Site Release { get; set;}
    public virtual Site Return { get; set;}
}

public class Site
{
    public virtual Calendar { get; set; }
}

public class Calendar
{
    public virtual IList<HolidayDate> Holidays { get; set; }
}

// Mapping:
public class OrderMap : ClassMap<Order>
{
    public OrderMap()
    {
        References(x => x.Release);
        References(x => x.Return);
    }
}

public class SiteMap : ClassMap<Site>
{
    public SiteMap()
    {
        Component(x => x.Calendar, component =>
        {
            component.Map(x => x.WorkingDays);
            component.HasMany(x => x.Holidays).Cascade.AllDeleteOrphan();
        });
    }
}

我想查询所有订单,具有特定状态并加入ReleaseReturn,但对于Release,我还想加入Calendar(这是一个组件映射实体)和日历我想加入所有假期(左外连接)。我尝试了几种不同的方式,但是一旦我尝试加入假期,我就会得到一个笛卡尔积(我假设我得到两个网站假期)。

我也尝试过期货(像这样):

var orders = Session.QueryOver<Order>()
    .Where(x => x.Status == Selected.Status)
    .Future<Order>();

Session.QueryOver<Order>()
    .JoinAlias(x => x.Release, () => release, JoinType.LeftOuterJoin)
    .JoinAlias(() => release.Calendar.Holidays, () => holiday, JoinType.LeftOuterJoin)
    .Where(x => x.Status == Selected.Status)
    .Future<Order>();

var output = orders.ToList();

...但我的假期仍然比预期的多。如果我可以找到一个查询,我还想过滤假期Date&gt;今天约会。

是否可以执行此查询或是否有我错过的选项?

0 个答案:

没有答案