我正在使用新应用程序中的代码进行映射,并使用约定模型映射器查看一些奇怪的行为。它只选择我的1..N关系中的一个作为Bag而一个作为Set。据我所见,它们的声明基本相同。如果我没有为BeforeMapSet设置事件处理程序,则永远不会触发相应的BeforeMapManyToOne处理程序。
答案 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" />
所以我猜,你在映射中的“小差异”可以隐藏在那里