0

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

  • 最喜欢的小猫
  • 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();

问题是一旦加载,FavoriteKitten 和 SecondFavoriteKitten 都是同一只小猫:等级为“2”的小猫。

我是否遗漏了一些标准?还是我以错误的方式解决这个问题?

4

1 回答 1

0

Diego,在 nhibernate 邮件列表中,帮助我看到了我的方式的错误。我把所有的结构都弄错了。

根据他的建议,我决定按照数据库中的小猫进行映射;作为列表。

于 2010-08-26T17:43:01.150 回答