У меня есть следующие модели и сопоставления (далее фрагменты кода).
Один конкурс должен иметь несколько связанных с ним критериев (множественный выбор) с самого начала.
В настоящее время, используя приведенные ниже сопоставления Fluent NHibernate, когда я создаю новый объект Конкурса, заполняйте свойства, затем создайте 3 новых объекта CompetitionAnswer и добавьте их в свойство CompetitionAnswers (свойство Competition), я бы ожидал для вызова "Сохранить" на сеансе, который будет ВСТАВИТЬ 1 строку конкурса и 3 строки "Соревнование" в БД.
Однако, как только я попытаюсь вызвать Save на сеансе, он жалуется, что CompetitionId имеет значение null и не может вставить нуль в таблицу CompetitionAnswers для этого поля - это правильно, но это не должно, Я предположил, что NHibernate сначала создаст Конкурс, а затем использует вновь созданное значение IDENTITY (CompetitionId) в таблице CompetitionAnswers?
Конкурс (модель)
public virtual int CompetitionId { get; private set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual IList<CompetitionAnswer> CompetitionAnswers { get; set; }
CompetitionAnswer (модель)
public virtual int CompetitionAnswerId { get; set; }
public virtual string Answer { get; set; }
public virtual Competition Competition { get; set; }
CompetitionMap (свободное отображение NHibernate)
public CompetitionMap()
{
Id(x => x.CompetitionId)
.GeneratedBy.Native();
Map(x => x.Title);
Map(x => x.Description);
HasMany(x => x.CompetitionAnswers)
.Cascade.AllDeleteOrphan()
.KeyColumn("CompetitionId")
.Inverse();
Table("Competitions");
}
CompetitionAnswerMap (свободное отображение NHibernate)
public CompetitionAnswerMap()
{
Id(x => x.CompetitionAnswerId)
.GeneratedBy.Native();
Map(x => x.Answer);
References(x => x.Competition)
.Column("CompetitionId");
Table("CompetitionAnswers");
}
Вот пример кода, который я использовал для тестирования этого сценария, который генерирует ошибку:
Competition c = new Competition();
c.Description = "Description";
c.Title = "Title";
CompetitionAnswer a1 = new CompetitionAnswer { Answer = "Answer 1" };
CompetitionAnswer a2 = new CompetitionAnswer { Answer = "Answer 2" };
CompetitionAnswer a3 = new CompetitionAnswer { Answer = "Answer 3" };
c.CompetitionAnswers.Add(a1);
c.CompetitionAnswers.Add(a2);
c.CompetitionAnswers.Add(a3);
session.Save(c);
Точная ошибка, которую я получаю, как только она пытается сохранить:
Невозможно вставить значение NULL в столбец "CompetitionId", таблица 'CompetitionAnswers'; колонка не Разрешить null. INSERT терпит неудачу. утверждение завершено.
Кто-нибудь может пролить свет на то, почему это не работает в настоящее время?