Fluent NHibernate для одного однонаправленного отображения
У меня есть классы Post и Comment, и у них есть отношения от одного до многих, где Post имеет список комментариев. Как я могу сопоставить это как однонаправленное отношение с Fluent NHibernate, так как комментарий не должен знать его родительскую Почту? В настоящее время это мое сопоставление для комментария:
Id(x => x.Id);
Map(x => x.Body);
References(x => x.User);
и для сообщения:
Id(x => x.Id);
Map(x => x.Title);
HasMany(x => x.Comments)
.Inverse()
.WithKeyColumn("PostId")
.Cascade.AllDeleteOrphan();
Это не работает, потому что когда я пытаюсь сохранить экземпляр Post с недавно добавленным комментарием, внешний ключ в комментарии (PostId) остается NULL. И, конечно, комментарий не может быть сохранен с помощью NULL PostId. Я попытался удалить предложение .Inverse(), но это тоже не работает.
Ответы
Ответ 1
NHibernate не поддерживает это сопоставление, если у вас есть ненулевое ограничение на ваш внешний ключ. Если вы удалите это ограничение, вы увидите, что NHibernate вставляет комментарии с нулевым PostId, а затем обновляет их с помощью идентификатора нового сообщения.
Вам либо нужно:
- Удалить ограничение не-null и вызов
Inverse
- Сохраняйте ограничение и сопоставляйте другую сторону отношения (делая это двунаправленным отношением и позволяя
Inverse
работать правильно).
Это описано в документации NHibernate для one-to-many, см. Очень важное примечание в конце.