У меня есть следующие модели и сопоставления (фрагменты кода приведены ниже).
С одним соревнованием с самого начала должно быть связано несколько ответов Competition (множественный выбор).
В настоящее времяс помощью отображений Fluent NHibernate, показанных ниже, при создании нового объекта Competition, заполнении свойств, создании 3 новых объектов CompetitionAnswer и добавлении их в свойство CompetitionAnswers (свойство Competition), я бы ожидал вызвать Save в сеансекоторый вставил бы 1 строку Соревнования и 3 строки Соревнования Ответа в БД.
Однако, как только я пытаюсь вызвать Save в сеансе, он жалуется, что CompetitionId является нулем, и он не может вставить ноль втаблица CompetitionAnswers для этого поля - что правильно, однако не следует предполагать, что NHibernate сначала создаст Competition, а затем использует вновь сгенерированное значение IDENTITY (CompetitionId) в таблице CompetitionAnswers?
конкуренion (Модель)
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 (Fluent NHibernate Mapping)
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';столбец не допускает пустых значений.Вставить не удается.Заявление было прекращено.
Кто-нибудь может пролить свет на то, почему это в настоящее время не работает?