强制NHibernate接受union-subclass的identity generator

时间:2016-04-08 09:10:00

标签: sql-server nhibernate

我有一张桌子X,主键是#34; ID"是一个标识int列。

此表映射到两个类(一次直接然后通过同义词),X和ExtendedX(扩展X)。

ExtendedX只添加了一些IList,IDictionnary(一对多)属性,这就是为什么除了X已经拥有的内容之外它不需要任何特定的新列。 因此,我将ExtendedX map映射到X的synonim(用于工作arround NHibernate"表已经映射"限制)作为"具体的子类" (小于联合子类...&GT)

那里的问题是NHibernate对union-sublass使用Identity列的保护(我知道当你不知道两个映射表实际上是同一个时它看起来像一个错误),它默认情况下会阻止此配置

我如何让NHibernate不拒绝为每个子类映射的具体表使用标识生成器?

1 个答案:

答案 0 :(得分:1)

union-subclass功能要求union-ed表的键可以在插入时分配。如果你通过使用重复的非标识id列来欺骗它,则会在插入上发生另一个障碍:在插入时,NHibernate将在您的表上为一个实体发出两个插入,一个插入用于基类,另一个插入用于union-ed子类

因此,您可能需要通过让除了标识之外的所有基本列都可为空来进行更多操作,添加用于检测第二个插入的触发器(将设置重复ID)并使用dup id来定位基本记录并相应地更新它(顺便将其重复的id列设置为标识值),然后取消第二个插入... Pew,它开始是一个伟大的编码恐怖。