У меня есть 2 объекта (таблицы) NHibernate, которые находятся в отношениях один ко многим.
Я получаю эту ошибку:
Не удается вставить явное значение для столбца идентификаторов в таблицу «Bookings_Locations», если для параметра IDENTITY_INSERT установлено значение OFF.
при попытке сохранить (вставить) новые записи.
Объекты
public class Booking
{
public virtual int Id { get; set; }
public virtual void AddBookingLocation(BookingLocation bookingLocationToAdd)
{
bookingLocationToAdd.Booking = this;
this.BookingLocations.Add(bookingLocationToAdd);
}
public virtual void RemoveBookingLocation(BookingLocation bookingLocationToRemove)
{
this.BookingLocations.Remove(bookingLocationToRemove);
}
public virtual IList<BookingLocation> BookingLocations { get; set; }
public Booking()
{
BookingLocations = new List<BookingLocation>();
}
}
public BookingMap()
{
Table("Bookings");
Id(x => x.Id).Column("ID");
HasMany(x => x.BookingLocations)
.KeyColumn("ID")
.Not.LazyLoad().Cascade.All();
}
public class BookingLocation
{
public virtual int Id { get; set; }
public virtual Booking Booking { get; set; }
}
public BookingLocationMap()
{
Table("Bookings_Locations");
Id(x => x.Id).Column("ID");
References(x => x.Booking)
.Column("ID")
.Not.LazyLoad().Nullable()
.Cascade.All();
}
Значение первичного ключа BookingLocation
(ID
) равно 0, как только он инициализируется, и я ничего ему не присваиваю. Что наводит меня на мысль, что проблема как-то в картировании отношений.
Я делаю это перед вызовом метода на скриншоте:
Booking.AddBookingLocation(BookingLocation);
this.bookingRepo.insertBooking(Booking, BookingLocation);
У меня никогда не было таких отношений, так что может быть далеко ...
Любая помощь приветствуется :)
Изменить:
У меня сейчас ошибка:
"В экземпляре объекта не задана ссылка на объект."
...когда запускается SessionFactory.OpenSession
.
Это как-то связано с:
public class BookingLocation
{
public BookingLocation(Booking inBooking)
{
this.Booking = inBooking;
inBooking.AddBookingLocation(this);
}
}
... потому что, когда я удаляю конструктор, он запускается (думал, не добавляя BookingLocation
)
Я предполагаю, что в то время, когда он открывает базу данных, в конструктор не передается экземпляр, как в вашем примере. Ты знаешь, что я имею в виду?