¿Cómo uso de NHibernate criterios de consultas a las asociaciones de carga sobre la base de condiciones adicionales
-
01-10-2019 - |
Pregunta
Vamos a decir que tienen un gato que tiene dos propiedades:
- FavoriteKitten
- SecondFavoriteKitten
Estos gatitos son discriminadas por su rango.
Al cargar un gato, quiero que el gatito con el rango de "1" a ser FavoriteKitten, y el gatito con el grado de "2" para ser SecondFavoriteKitten.
Los subyacentes miradas base de datos como:
table Cat
----------------
CatId
table Kitten
-----------------
KittenId
CatId
Rank
Mis PROYECCIÓN tiene el aspecto:
<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>
Mis criterios de consulta se parece a
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();
El problema es que una vez cargado, tanto FavoriteKitten y SecondFavoriteKitten son los mismos gatito:. El uno con un rango de "2"
he dejado algo fuera de los criterios? O voy de este por el camino equivocado?
Solución
Diego, otra vez en la lista de correo nhibernate, me ayudó a ver el error de mis maneras. Todo lo que había estructurado mal.
Por su sugerencia, decidí mapa gatitos, ya que está en la base de datos; como listas.