NHibernate-映射到辅助密钥的最佳方式

NHibernate-映射到辅助密钥的最佳方式,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我正在尝试将一个新的域模型映射到一个固定的模式遗留数据库,并且一直在研究如何进行某种类型的映射。这是我的问题所在 工人有很多种。例如一个小时工和一个工薪工 HourlyWorker的数据存储在WORKERS表和HOURLY_WORKERS表中,这两个WORKERS之间具有标准外键关系。PK_WORKERS=HOURLY_WORKERS.FK_WORKERS 从NHibernate的角度来看,HourlyWorker的“Id”被映射到WORKERS.PK_-WORKERS,这是应该的 到目前为止还

我正在尝试将一个新的域模型映射到一个固定的模式遗留数据库,并且一直在研究如何进行某种类型的映射。这是我的问题所在

工人有很多种。例如一个小时工和一个工薪工

HourlyWorker的数据存储在WORKERS表和HOURLY_WORKERS表中,这两个WORKERS之间具有标准外键关系。PK_WORKERS=HOURLY_WORKERS.FK_WORKERS

从NHibernate的角度来看,HourlyWorker的“Id”被映射到WORKERS.PK_-WORKERS,这是应该的

到目前为止还不错

现在假设有一个对象只适用于小时工

class Timesheet
  HourlyWorker Owner { get; private set; }
在遗留数据库中,这以相当简单的方式映射到时间表表,但有一个捕获:指向所有者的外键链接不是通过指向WORKER表的链接表示的,而是通过指向HOURLY_WORKER表的链接表示的。换句话说,外键FK_HOURLY_WORKER是唯一标识符,但不指向NHibernate视图中的主键值

我不能简单地将Id HourlyWorker更改为映射到HourlyWorker表,因为引用houry workers的数据库中有70%使用WORKER的主键作为外键Id

映射此关系的选项有哪些?

这可能会更简单:所有者属性是只读的-时间表不能更改其所有者。但是,当删除HourlyWorker时,删除应该级联到其所有时间表


最后,请不要回复我更改数据库的建议。我知道。如果你想要我客户的电话号码,这样你就可以试着让他们相信他们的模式不是最完美的,那么我可以提供它。我已经为这场战斗奋斗了几个月。另外,请不要回答这表明问题在于管理,而不仅仅是NHibernate映射。我也知道。就目前而言,我只想获得有关如何解决技术问题的建议。

我相信您正在寻找多对一元素的属性ref

顺便说一句,映射到遗留模式是很困难的——要为一些严重的痛苦做好准备!从好的方面来说,当你从另一边出来的时候,你将成为一名NHibernate专家