ConventionModelMapper如何确定集合/包的关系

时间:2012-11-13 21:41:53

标签: nhibernate mapping-by-code

我正在使用新应用程序中的代码进行映射,并使用约定模型映射器查看一些奇怪的行为。它只选择我的1..N关系中的一个作为Bag而一个作为Set。据我所见,它们的声明基本相同。如果我没有为BeforeMapSet设置事件处理程序,则永远不会触发相应的BeforeMapManyToOne处理程序。

1 个答案:

答案 0 :(得分:1)

XML映射以这种方式更明确,通常将 IList&lt;&gt; 映射到<bag> ISet <set>。有一个解释,Fluent引擎(来自1.2版)试图做同样的事情:

https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping

(请参阅HasMany / one-to-many / Collection Types部分)

以上链接的摘录:

public IList<Child> Children { get; set; }    
HasMany(x => x.Children); // <bag />


private ISet<Child> _children;    
public IEnumerable<Child> Children
{
  get { return _children; }
}

HasMany(x => x.Children); // <set access="nosetter.camelcase-underscore" />


private ISet<Child> _children;    
public IEnumerable<Child> GetChildren()
{
  return _children;
}

HasMany(x => x.GetChildren()); // <set name="_children" access="field" />

所以我猜,你在映射中的“小差异”可以隐藏在那里