Мне нужна помощь.
Я только начинаю с NHibernate и использую Fluent для сопоставлений. Казалось, все работает нормально до сегодняшнего дня.
Вот история:
У меня есть две таблицы в моей базе данных: Store и WorkDay
Первая таблица содержит информацию о магазине, а таблица WorkDay содержит информацию о днях недели и времени начала / окончания, когда магазин открыт.
Store содержит столбец Guid StoreID PK, на который есть ссылка в таблице WorkDay .
Итак, у меня есть файл сопоставления для Store , где у меня есть HasMany ассоциация с таблицей WorkDay и соответствующий POCO для Store .
Теперь, когда я заполняю все необходимые данные и пытаюсь сохранить их в базе данных, я получаю исключение, сообщающее, что вставка в таблицу WorkDay завершилась неудачно, поскольку StoreID имеет нулевое значение и ограничение таблицы не допускает пустые значения для этого столбца (что, конечно, является ожидаемым поведением).
Я понимаю причину этого исключения, но я не знаю, как его решить.
Причина сбоя вставки заключается в том, что StoreID генерируется при вставке, но коллекция [b] WorkDay [/ b] сначала сохраняется , во время, когда StoreID еще не создан!
Итак, как заставить NHibernate сгенерировать этот идентификатор для передачи его в зависимые таблицы? Или есть другое решение для этого?
Спасибо!
Вот код для StoreMap
public class StoreMap : ClassMap<Store> {
public StoreMap() {
Id(x => x.StoreID)
.GeneratedBy.GuidComb();
Map(x => x.City);
Map(x => x.Description);
Map(x => x.Email);
Map(x => x.Fax);
Map(x => x.ImageData).CustomType("BinaryBlob");
Map(x => x.ImageMimeType);
Map(x => x.Name);
Map(x => x.Phone);
Map(x => x.Street);
Map(x => x.Zip);
HasMany(x => x.WorkDays)
.Inverse().KeyColumn("StoreID").ForeignKeyCascadeOnDelete()
.Cascade.All();
}
}
и это для WorkDayMap
public class WorkDayMap : ClassMap<WorkDay>{
public WorkDayMap() {
Id(x => x.WorkDayID)
.GeneratedBy.Identity();
Map(x => x.TimeOpen);
Map(x => x.TimeClose);
References(x => x.Store).Column("StoreID");
References(x => x.Day).Column("DayID");
}
}