流利的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);
我不会推荐,虽然它作为每佩德罗的答案。
答
这是正确的,它只会过滤根实体。如果查询更改了根实体集合中的项目,那么您可能会遇到一个可怕的问题:如果再次保存实体,那么从集合中过滤掉的项目将永久删除该实体!当然没人愿意。
如果你想要这种行为,你必须手动(通过加载实体后的foreach)来完成,尽管我不会因为上述原因而推荐这样做。我的理解是使集合中的实体成为查询的根。
+0
感谢您的意见。 1+为解释为什么我不想这样做! – a432511 2010-08-27 19:13:35
谢谢! 1+并且答案正确 – a432511 2010-08-27 19:13:56