如何使用NHibernate条件查询根据其他条件加载关联

时间:2010-08-26 17:10:21

标签: nhibernate nhibernate-criteria

假设我有一只猫有两个属性:

  • FavoriteKitten
  • SecondFavoriteKitten

这些小猫受其等级的歧视。

加载猫时,我想要等级为“1”的小猫 FavoriteKitten,以及排名为“2”的小猫 SecondFavoriteKitten。

底层数据库如下所示:

table Cat
----------------
CatId


table Kitten
-----------------
KittenId
CatId
Rank

我的映射如下:

<class name="Cat">
  ... other stuff
  <one-to-one name="FavoriteKitten" class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
  <one-to-one name="SecondFavoriteKitten" class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
</class>

我的条件查询类似于

Cat cat = sess.CreateCriteria(typeof(Cat))
.CreateAlias("FavoriteKitten", "kt1")
.Add(Expression.Eq("kt1.Rank", "1"))
.CreateAlias("SecondFavoriteKitten", "kt2")
.Add(Expression.Eq("kt2.Rank", "2"))
.UniqueResult();

麻烦的是,一旦加载,收藏夹和收藏夹 SecondFavoriteKitten是同一只小猫:排名为“2”的小猫。

我是否遗漏了标准?或者我是否会这样做 错误的方式?

1 个答案:

答案 0 :(得分:0)

迭戈,在nhibernate邮件列表中,帮助我看到了我的方式的错误。我的一切都是错误的。

根据他的建议,我决定将小猫映射到数据库中;作为清单。