流畅的NHibernate - 集合不过滤

时间:2010-08-27 18:43:44

标签: c# asp.net nhibernate fluent-nhibernate

我有一个会话条件语句(Fluent 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对象被过滤了。

感谢。

2 个答案:

答案 0 :(得分:3)

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

如果你想要这种行为,你必须手动完成(在实体加载后通过foreach),虽然我不会因为上述原因而推荐它。我的兴趣是使集合中的实体成为查询的根。

答案 1 :(得分:2)

我只发现了一些关于这样做的狡猾的链接 - 所以这是你自己的风险:)。

如果添加以下内容,它似乎应该可以使用:

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

根据佩德罗的回答,我不推荐它。