代码之家  ›  专栏  ›  技术社区  ›  a432511

Fluent NHibernate-集合未过滤

  •  1
  • a432511  · 技术社区  · 14 年前

    我有一个session criteria语句(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

    似乎只有根对象被过滤。

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Goblin    14 年前

    我只找到了一些关于这样做的不可靠的链接-所以这是你自己的风险:)。

    如果您添加以下内容,它似乎会起作用:

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

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

        2
  •  3
  •   Pedro    14 年前

    没错,它只会过滤根实体。如果查询更改了根实体集合中的项,您可能会遇到一个可怕的问题:如果您再次保存该实体,则从集合中筛选出来的项将从关系中永久删除!当然没人想要。

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