使用Criteria仅获取基本类型

时间:2009-10-05 10:47:27

标签: fluent-nhibernate

我正在寻找Fluent NHibernate中的方法来获取PARENT类型的所有对象的列表 使用标准。 我有一个父对象和一个派生的孩子。 父亲包含一份孩子名单。

问题在于我使用时:

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

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

如何在没有派生孩子的情况下获取所有“父亲”元素的列表?

这是第一个答案(@Stefan Steinegger's)

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

看起来我需要类似的东西 - 但它在Fluent NHibernate中不起作用。

谢谢, 达尼

1 个答案:

答案 0 :(得分:0)

问题实际上是:您如何确定Parent是否是根父母?有各种方法:

  • 保留模型并定义:root是未继承的Parent,不包含在任何其他Parent中。

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

部分“未包含在任何其他父级中很难以有效的方式找到。

  • 您可以设置父对象的引用。根是Parent,其父引用为null。

  • 您从公共基类派生您的Root。 Child不再是Root,Root是Root

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


BTW:你可以过滤确切的类型,但只能使用HQL。

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