Подтвердить что ты не робот

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(), но это тоже не работает.

4b9b3361

Ответ 1

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

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

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

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