c# - Fluent NHibernate - 集合不过滤

标签 c# asp.net nhibernate fluent-nhibernate

我有一个 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),尽管出于上述原因我不推荐这样做。我的建议是使集合中的实体成为查询的根。

关于c# - Fluent NHibernate - 集合不过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587179/

相关文章:

nhibernate - 使用按位运算符时 HQL 到 CriteriaQuery

nhibernate - 将对象从基类转换为子类是否有效?

c# - 单元测试和休眠?

c# - 无法加载文件或程序集

javascript - 如何根据 url 或我们所在的页面在 _Layut 中呈现脚本

asp.net - 如何显示所有 ASP.NET Web 应用程序加载/引用的程序集及其版本号?

javascript - jQuery 隐藏 ASP 元素

C# 文本框许可证 key 自动格式化

c# - 为什么 C# 编译器会产生方法调用以在 IL 中调用 BaseClass 方法

javascript - asp页面内的javascript语法错误