2009-12-09 50 views
0

关系我的理解是正确的,那下面的类和表的设计是不可能的NHibernate:NHibernate的一个一对多没有双向关联

public class Parent 
{ 
    public virtual Guid Id { get; set; } 
    public virtual ISet<Child> Children { get; set; } 
    ... 
} 

public class Child 
{ 
    public virtual Guid Id { get; set; } 
    ... 
} 

table Parent { Id, ... } 
table Child { Id, ParentId (not null), ... } 

所以注意以下几点:

  • 一父母与子女之间的一对多关联
  • 使用ISet
  • 没有从儿童返回父母的双向关联
  • 孩子的的ParentId列不为空

回答

1

我的膝盖混乱反应是说它被支持,但我认为你是对的。您的选项是 - Child表中的双向关系或可为null的ParentId列。

这里有一个有趣的线程在那里Ayende进入它的bug跟踪系统对NH http://nhjira.koah.net/browse/NH-1050 (这是NH的以前的版本,但我认为答案是一样的)

UPDATE 11年5月7日

看起来像Nhibernate JIRA(即没有域名)奇怪的事情。该链接目前可在https://nhibernate.jira.com/browse/NH-1050找到。但是,在NHibernate 3出来野外,我还没有检查,看看这个问题是否仍然是一个问题。

+0

上面的链接(Ayende文章)似乎已被破坏。 – CyberMonk 2011-05-07 18:09:53

+0

为你修复它 – 2011-05-08 04:59:50

0

您所描述的情况是非常多的意图,并通过NHibernate的支持。

+0

我怎样才能做到这一点 - 根据文档: “如果协会列被声明为NOT NULL,NHibernate的可能导致违反约束时,它会创建或更新关联为了防止这个问题,你必须使用与许多有价值的结尾(集合或包)标记为inverse =“true”的双向关联。“ – cbp 2009-12-09 02:33:00

+0

因此,请尝试在父代的子集合映射中使用''。 – yfeldblum 2009-12-09 04:28:38

+0

但是我的一个要求是我不想要双向关联,因为它会让模型更加混乱。 – cbp 2009-12-09 07:47:51