开发者

How do I use NHibernate criteria queries to load associations based on additional conditions

开发者 https://www.devze.com 2023-01-13 12:20 出处:网络
Let\'s say I have a Cat that has two properties: FavoriteKitten SecondFavoriteKitten These kittens are discriminated by their Rank.

Let's say I have a Cat that has two properties:

  • FavoriteKitten
  • SecondFavoriteKitten

These kittens are discriminated by their Rank.

When loading a Cat, I want the kitten with the rank of "1" to be FavoriteKitten, and the kitten with the rank of "2" to be SecondFavoriteKitten.

The underlying database looks like:

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


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

My mapping looks like:

<class name="Cat">
  ... other stuff
  <one-to-one name="FavoriteKitten" class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
  <one-to-one name="SecondFavoriteKitten" 开发者_Go百科class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
</class>

My criteria query looks like

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();

The trouble is that once loaded, both FavoriteKitten and SecondFavoriteKitten are the same kitten: the one with a Rank of "2".

Have I left something out of the criteria? Or am I going about this the wrong way?


Diego, over in the nhibernate mailing list, helped me see the error of my ways. I had everything structured wrong.

Per his suggestion, I decided to map Kittens as it is in the database; as lists.

0

精彩评论

暂无评论...
验证码 换一张
取 消