流畅的NHibernate一对多单向映射

时间:2009-02-16 21:41:15

标签: fluent-nhibernate

我有Post和Comment课程,他们有一对多关系,其中Post有一个评论列表。如何将此映射为与Fluent NHibernate的单向关系,因为评论不需要知道其父Post?目前,这是我对Comment的映射:

Id(x => x.Id);
Map(x => x.Body);
References(x => x.User);

和Post:

Id(x => x.Id);
Map(x => x.Title);
HasMany(x => x.Comments)
    .Inverse()
    .WithKeyColumn("PostId")
    .Cascade.AllDeleteOrphan();

这不起作用,因为当我尝试使用新添加的Comment保存Post实例时,Comment(PostId)上的外键保持为NULL。当然,使用NULL PostId无法保存注释。我已经尝试删除.Inverse()子句,但这也不起作用。

1 个答案:

答案 0 :(得分:22)

当您的外键具有非空约束时,NHibernate不支持此映射。如果删除该约束,您将看到NHibernate使用null PostId插入Comments,然后使用新Post的Id更新它们。

您需要:

  1. 删除非空约束 Inverse调用
  2. 保留约束,并映射关系的另一面(使其成为双向关系,并允许Inverse正常工作)
  3. NHibernate documentation for one-to-many's中介绍了这一点,最后请参阅非常重要的注意事项