Ajouter des Restrictions à une jointure à l'aide de CreateCriteria dans nHibernate
Question de débutant, j'en suis sûr:
Je suis en train de faire une jointure entre 2 tables et de restreindre le résultat en même temps comme ceci:
var bookings = session.CreateCriteria<Booking>("p")
.CreateCriteria("p.BookingLocations", JoinType.InnerJoin)
.Add(Restrictions.Eq("p.BookingLocations.locationID", locationId))
.SetMaxResults(30)
.List<Booking>();
J'obtiens l'erreur:
N'a pas pu résoudre la propriété: BookingLocations.locationID de: Réservation
Je peux voir que la Réservation.BookingLocation contient beaucoup de disques, il est l'un de beaucoup de relation entre la Réservation et le BookingLocation, mais je ne suis pas sûr si c'est la cause du problème.
Je suppose que si c'était que j'avais besoin de faire quelque chose comme:
.Add(Restrictions.Eq("p.BookingLocations.first().locationID", locationId))
...mais sans doute que ça ne marcherait pas 😉
Classes
public class Booking
{
public virtual int Id { get; set; }
public virtual Int32 bookingID { get; set; }
public virtual Int32 bookingAdminID { get; set;
}
public class BookingLocation
{
public virtual int Id { get; set; }
public virtual Int32 bookingID { get; set; }
public virtual Int32 locationID { get; set; }
}
Mappages
public BookingMap()
{
Table("Bookings");
Id(x => x.Id).Column("ID");
Map(x => x.bookingID).Column("BookingID");
Map(x => x.bookingAdminID).Column("BookingAdminID");
}
public class BookingLocation
{
public virtual int Id { get; set; }
public virtual Int32 bookingID { get; set; }
public virtual Int32 locationID { get; set; }
}
Vous devez vous connecter pour publier un commentaire.
Les sous-critères définit un nouveau champ d'application, qui est la racine BookingLocation. Vous avez juste besoin d'utiliser
locationID
: