Добавьте ограничения к объединению, используя CreateCriteria в nHibernate - PullRequest
6 голосов
/ 03 февраля 2012

Вопрос новичка, я уверен:

Я пытаюсь объединить 2 таблицы и одновременно ограничить результат следующим образом:

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

Я получаю ошибку: Не удалось разрешить свойство: BookingLocations.locationID из: Бронирование

Я вижу, что Booking.BookingLocation содержит много записей, поскольку между Booking и BookingLocation существует отношение один ко многим, но я не уверен, является ли это причиной проблемы.

Полагаю, если бы это было так, мне нужно было бы сделать что-то вроде:

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

... но, несомненно, это не сработает;)

Классы

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

Отображения

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

1 Ответ

7 голосов
/ 03 февраля 2012

Подкритерий определяет новую область, которая укоренена в BookingLocation.Вам просто нужно использовать locationID:

session.CreateCriteria<Booking>("p")
       .CreateCriteria("p.BookingLocations", JoinType.InnerJoin)
       .Add(Restrictions.Eq("locationID", locationId))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...