Come faccio a usare criteri NHibernate query ad associazioni di carico in base alle condizioni supplementari
-
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?
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.