Come faccio a usare criteri NHibernate query ad associazioni di carico in base alle condizioni supplementari

StackOverflow https://stackoverflow.com/questions/3577577

  •  01-10-2019
  •  | 
  •  

Domanda

dire Let ho un gatto che ha due proprietà:

  • FavoriteKitten
  • SecondFavoriteKitten

Questi gattini sono discriminati per la loro Rank.

Quando si carica un gatto, io voglio il gattino con il grado di "1" per essere FavoriteKitten, e il gattino con il grado di "2" per essere SecondFavoriteKitten.

I sottostanti sguardi di database come:

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


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

I miei sguardi di mappatura come:

<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>

I miei criteri di query appare come

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

Il problema è che, una volta caricata, sia FavoriteKitten e SecondFavoriteKitten sono gli stessi gattino:. L'uno con un rango di "2"

ho lasciato qualcosa fuori dei criteri? O sto andando su questo il modo sbagliato?

È stato utile?

Soluzione

Diego, nel corso nella mailing list NHibernate, mi ha aiutato a vedere l'errore dei miei modi. Avevo tutto strutturato sbagliato.

Per suo suggerimento, ho deciso di mappare gattini come è nel database; come liste.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top