Fluent NHibernate One-To-Many Mapping

У меня есть следующие 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, но пока безуспешно. Кто-нибудь может помочь?

8
задан torvin 4 April 2013 в 07:19
поделиться