У меня есть следующие 2 класса:
Advert
public virtual int Id { get; set;
public virtual IList<AdvertImage> AdvertImages { get; set; }
AdvertImage
public virtual int Id { get; set; }
public virtual string Filename { get; set;
public virtual Advert Advert { get; set; }
В БД моя таблица AdvertImages имеет FK «AdvertId», который относится к таблице Adverts, которая имеет PK «Id '.
Это сопоставление «один ко многим», в котором одно объявление может иметь много изображений.
Мои сопоставления Fluent NHibernate (отредактированы для краткости):
AdvertMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
HasMany(x => x.AdvertImages)
.KeyColumn("AdvertId")
.Inverse();
...
Table("Adverts");
AdvertImageMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
References(x => x.Advert)
.Column("AdvertId");
...
Table("AdvertImages");
Я создаю новый экземпляр Advert
в коде, а затем заполняю AdvertImages
свойство (объявления) с List
.
Когда я собираюсь сохранить свой объект Advert
в БД, я хочу, чтобы AdvertImages были вставлены в их таблицу AdvertImages, но из-за взаимосвязи между двумя таблицами мне нужна вставка Advert для происходит первым, так как генерируется идентификатор PK, который затем можно вставить в таблицу AdvertImages. (Когда я создаю свой список AdvertImage, я заполняю свойство Filename, но, очевидно, на этом этапе у меня нет нового AdvertId, поэтому я хочу, чтобы он заполнялся, когда реклама сохраняется в БД).
Я пробовал экспериментировать с различными настройками Inverse() и Cascade, но пока безуспешно. Кто-нибудь может помочь?