2012-02-03 10 views
6

Początkujący pytanie jestem pewien:Dodaj ograniczenia, aby łączyć za pomocą CreateCriteria w NHibernate

próbuję zrobić sprzężenia między 2 stoliki i ograniczyć wynik w tym samym czasie jak ten:

var bookings = session.CreateCriteria<Booking>("p") 
         .CreateCriteria("p.BookingLocations", JoinType.InnerJoin) 
         .Add(Restrictions.Eq("p.BookingLocations.locationID", locationId)) 
         .SetMaxResults(30) 
         .List<Booking>(); 

pojawia się błąd: nie można rozwiązać właściwość: BookingLocations.locationID od: Rezerwacja

widzę, że Booking.BookingLocati on zawiera wiele rekordów, ponieważ istnieje jeden do wielu relacji między rezerwacją a BookingLocation, ale nie jestem pewien, czy to jest przyczyna problemu.

myślę, czy to, że muszę zrobić coś takiego:

.Add(Restrictions.Eq("p.BookingLocations.first().locationID", locationId)) 

... ale bez wątpienia, że ​​nie będzie działać;)

Klasy

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

Mapowania

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

Odpowiedz

7

Podkriteria definiuje nowy zakres, który jest zakorzeniony w BookingLocation. Musisz tylko użyć locationID:

session.CreateCriteria<Booking>("p") 
     .CreateCriteria("p.BookingLocations", JoinType.InnerJoin) 
     .Add(Restrictions.Eq("locationID", locationId)) 
+0

Właśnie tego potrzebowałem, dzięki! – iKode

Powiązane problemy