2012-02-03 19 views
6

câu hỏi Beginner tôi chắc chắn rằng:Thêm Hạn chế đến một tham gia sử dụng CreateCriteria trong nHibernate

tôi đang cố gắng để làm một tham gia giữa 2 bảng và hạn chế kết quả cùng lúc như thế này:

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

tôi nhận được lỗi: không thể giải quyết bất động sản: BookingLocations.locationID của: Đặt

tôi có thể thấy rằng Booking.BookingLocati trên có chứa nhiều hồ sơ tại đó là một trong nhiều tàu quan hệ giữa Booking và BookingLocation, nhưng tôi không chắc đó có phải là nguyên nhân của vấn đề hay không.

Tôi đoán nếu nó là tôi cần phải làm điều gì đó như:

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

... nhưng chắc chắn từ đó sẽ không làm việc;)

Lớp

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

Ánh xạ

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

Trả lời

7

Tiêu chí phụ xác định phạm vi mới, được bắt nguồn từ BookingLocation. Bạn chỉ cần sử dụng locationID:

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

Chỉ cần những gì tôi cần, cảm ơn! – iKode

Các vấn đề liên quan