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

使用条件仅获取基类型

  •  1
  • Dani  · 技术社区  · 15 年前

    我正在寻找一种使用fluent nhibernate的方法来获得父类型的所有对象的列表 使用标准。 我有一个父对象和一个派生的孩子。 父亲有一张孩子的名单。

    问题是当我使用:

    ICriteria crit = session.CreateCriteria(typeof(Parent))
    IList<Parent> myRes = crit.List<Parnet>()
    

    nh返回父元素和派生子元素的列表,这是“正确的”b/c,这是我所要求的,但这不是我所需要的。 (子元素应该只在父对象中,但是由于它们也是父对象类型,因为它们是从父对象派生的…NH也用这种方法带来了它们。)

    如果没有派生的子元素,如何获取所有“父”元素的列表?

    这是第一个答案(@stefan steinegger's)

    session
      .CreateQuery("from Parent where Parent.class == :class")
      .AddType(typeof(Parent));
    

    看起来我需要这样的东西-但用流利的NHibernate是行不通的。

    谢谢, 达尼

    1 回复  |  直到 15 年前
        1
  •  0
  •   Stefan Steinegger    15 年前

    实际上问题是:如何确定 Parent 是根父级吗?有多种方法:

    • 您可以保留模型并定义:根是一个未继承的父级,并且不包含在任何其他父级中。

    部分 “不是继承的” 可能很容易确定,但实际上是一个糟糕的定义。在使用继承时,您实际上不应该关心作为特定类型获得的对象是否实际继承,这就是继承的本质。

    部分 “不包含在任何其他父级中” 很难找到有效的方法。

    • 设置对对象父对象的引用。根是 起源 其父级引用空值。

    • 从一个公共基类派生出根。孩子不再是根,根是根 Root .

    我建议采取最后一种选择。


    顺便说一句:您可以筛选出确切的类型,但只能使用hql。

    session
      .CreateQuery("from Parent where Parent.class == :class")
      .AddType(typeof(Parent));