流利的NHibernate - 集合没有过滤

问题描述:

我有一个会话标准声明(流利NHibernate),似乎没有过滤子集合,即使我有表达式/限制定义。流利的NHibernate - 集合没有过滤

ICriteria criteria = session.CreateCriteria(typeof(MyClass)); 
criteria.CreateAlias("MyCollection", "MC"); 
criteria.Add(Restriction.Eq("MC.Property", value)); 
IList<MyClass> list = criteria.List<MyClass>(); 

这将返回MyClass类型的所有对象都MyCollection.Property = value,但是MyCollection不被过滤到MyCollection.Property = value

好像只有root对象得到过滤。

谢谢。

我只找到了一些这样做的狡猾链接 - 所以这是在你自己的风险:)。

看来,如果你加它应该工作如下:

criteria.CreateCriteria("MC", JoinType.LeftOuterJoin); 

我不会推荐,虽然它作为每佩德罗的答案。

+0

谢谢! 1+并且答案正确 – a432511 2010-08-27 19:13:56

这是正确的,它只会过滤根实体。如果查询更改了根实体集合中的项目,那么您可能会遇到一个可怕的问题:如果再次保存实体,那么从集合中过滤掉的项目将永久删除该实体!当然没人愿意。

如果你想要这种行为,你必须手动(通过加载实体后的foreach)来完成,尽管我不会因为上述原因而推荐这样做。我的理解是使集合中的实体成为查询的根。

+0

感谢您的意见。 1+为解释为什么我不想这样做! – a432511 2010-08-27 19:13:35