我希望我的一个实体与类层次结构具有一对一的关系。把它想象成一个策略模式,每个策略都需要不同的参数来持久化。我尝试使用OneToOne
and JoinedBase
/的组合JoinedKey
,但我遇到了一个问题。
使用这种组合,主实体的主键也作为代表层次结构中根类的表的主键出现,并作为子类的主键出现:
Order --------------- TaxCalculator
([PrimaryKey]Id = 1234) ([PrimaryKey(PrimaryKeyType.Foreign)]OrderId = 1234)
^
|
|
UkTaxCalculator
([JoinedKey]UkTaxCalculatorId = 1234)
我可以坚持这一点,但是我无法更改TaxCalculator
我拥有的子类。当我做类似的事情时:
order.TaxCalculator = new OverseasTaxCalculator(order);
然后尝试刷新,然后 ActiveRecord/NHibernate(可以理解)对现在有TaxCalculators
两个Id = 1234
.
我可以通过用 / 替换 来解决这个OneToOne
问题HasMany
,BelongsTo
并向对象的用户隐藏多重性Order
,但我很想知道是否可以用OneToOne
.
github 上有完整的代码示例。当第二个被释放时,此代码会引发异常SessionScope
。如果您克隆项目,它应该是开箱即用的。