IndexOutOfRange Исключение при попытке сохранить () / вставить с помощью nHibernate - PullRequest
0 голосов
/ 21 марта 2012

У меня есть 2 сущности, которые хорошо играют вместе, когда я извлекаю данные из базы данных, но теперь, когда я пытаюсь что-то сохранить, я получаю странную ошибку, и устранение не помогает мне отследить причину:

enter image description here

Бронирование

public class Booking
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
}

Место бронирования

public class BookingLocation
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
    public virtual Int32 locationID { get; set; } 
    public virtual DateTime startDateTime { get; set; }
    public virtual DateTime endDateTime { get; set; }
}

Карта бронирования

public class BookingMap : ClassMap<Booking>
{
    public BookingMap()
    {
        Table("Bookings");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        HasMany(x => x.BookingLocations)                
           .KeyColumn("BookingID")
          .Not.LazyLoad().Cascade.All(); 
    }
}

Отображение местоположения книги

public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");


        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}

Есть идеи?

1 Ответ

2 голосов
/ 21 марта 2012

Вы пытаетесь отобразить один и тот же столбец дважды (BookingId):

Map(x => x.bookingID).Column("BookingID");

References(x => x.Booking)
     .Column("BookingID")
     .Not.LazyLoad().Nullable()
     .Cascade.All();

Если вам нужно сослаться на поле BookingId, вы можете просто использовать свои многие к одному (References)Booking.BookingId чтобы ваше отображение стало таким:

public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");

        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}

Пример

У меня есть доступ только для чтения к моим коллекциям, поэтому я использую следующие методы для добавления и удаления элементов из этой коллекции:

    public virtual void AddBookingLocation(BookingLocation bookingLocationToAdd)
    {
        bookingLocationToAdd.Booking = this;
        this.bookingLocations.Add(bookingLocationToAdd);
    }

    public virtual void RemoveBookingLocation(BookingLocation bookingLocationToRemove)
    {
        this.bookingLocations.Remove(bookingLocationToRemove);
    }
...