Skip to main content
 首页 » 编程设计

c#之Fluent NHibernate之集合不过滤

2024年02月03日27unruledboy

我有一个 session 条件语句 (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 .属性 = 值

似乎只有 Root 对象被过滤了。

谢谢。

请您参考如下方法:

没错,它只会过滤根实体。如果查询更改了根实体集合中的项目,您可能会遇到一个可怕的问题:如果您再次保存该实体,则从集合中过滤掉的项目将永久地从关系中删除!并且肯定没有人想要那样。

如果您想要这种行为,您必须手动执行(在加载实体后通过 foreach),尽管出于上述原因我不推荐这样做。我的建议是使集合中的实体成为查询的根。