2016-02-26 73 views
0

条件计数考虑下面的实体:FluentNHibernate许多一对多的儿童

Package  Manifest  Content 
----------  ----------  ----------  
Id    PackageId  Id 
Name   ContentId  Name 
           Status 

的关系是多到很多,其中一个包可以有多个内容和内容可以属于多个包。

我想要做的是,对于给定的Package.Id,得到具有特定Status的所有Content的计数。

我的映射工作正常,但我一直无法弄清楚如何在不加载Content的情况下实现Content的条件计数。一种选择是在映射中使用ApplyChildFilter并与ExtraLazyLoad一起使用,但这意味着我必须为此创建专用属性。

有没有办法实现这一点,而不会回落在CreateSQLQuery

回答

0

以下查询是否适合您?

session 
    .QueryOver<Package>() 
    .JoinQueryOver(x => x.Manifest) 
    .JoinQueryOver(x => x.Content) 
    .Where(x => x.Status == someStatus) 
    .Select(Projections.RowCount()) 
    .FutureValue<int>() 
    .Value 
+0

的问题是,该清单没有明确映射,因为它是通过'HasManyToMany.Table( “清单”)隐含映射。ParentKeyColumn( “包标识”)。ChildKeyColumn( “内容识别”)'。如果我为Manifest添加了明确的映射和属性,我认为你的提议会起作用,但是我希望以某种方式避免这种情况(现在只需使用SQL来基本完成此JOIN)。 –