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

时间:2010-08-10 22:45:49

标签: nhibernate nhibernate-mapping

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

有各种类型的工人。例如,HourlyWorker和SalariedWorker。

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

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

到目前为止一切顺利。

现在假设有一个对象仅适用于每小时工人。

class Timesheet
  HourlyWorker Owner { get; private set; }

在旧数据库中,它以相当简单的方式映射到TIMESHEETS表,但有一个catch:到所有者的外键链接不是通过指向WORKER表的链接,而是通过指向HOURLY_WORKER表的链接表示。换句话说,外键FK_HOURLY_WORKER是唯一标识符,但指向NHibernate视图中的主键值。

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

我有什么选择来映射这种关系?

可能使这更容易的事情:Owner属性是只读的 - Timesheet不能更改它的所有者。但是,当删除HourlyWorker时,删除应该级联到它们的所有Timesheets。

最后,请不要回复我更改数据库的建议。我知道。如果你想要我的客户的电话号码,你可以试着说服他们他们的架构不是最完美的东西,那么我可以提供它。几个月来我一直在打这场斗争。另外请不要回答这表明问题是管理问题,而不仅仅是NHibernate映射。我也知道。目前,我只想就如何解决技术问题提出建议。

1 个答案:

答案 0 :(得分:2)

我相信您正在寻找多对一元素的 property-ref 属性: NHibernate docs

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