Свободное однонаправленное картирование NHibernate один ко многим - PullRequest
15 голосов
/ 17 февраля 2009

У меня есть классы 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 с новым добавленным комментарием, внешний ключ для Comment (PostId) остается пустым. И, конечно, комментарий не может быть сохранен с пустым PostId. Я пытался удалить предложение .Inverse (), но это тоже не работает.

1 Ответ

22 голосов
/ 18 февраля 2009

NHibernate не поддерживает это отображение, когда у вас есть ненулевое ограничение на ваш внешний ключ. Если вы удалите это ограничение, вы увидите, что NHibernate вставляет Комментарии с нулевым PostId, а затем обновляет их с помощью Id нового сообщения.

Вам либо нужно:

  1. Снимите ненулевое ограничение и Inverse вызов
  2. Сохраните ограничение и отобразите другую сторону отношений (сделав это двунаправленным отношением и позволив Inverse работать правильно)

Это описано в документации NHibernate для для одного-многих, см. Очень важное примечание в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...