多列多对一

时间:2010-06-02 10:46:43

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

我有一个遗留数据库和两个表之间的一对一关系。关键是关系使用两列,而不是一列。有没有办法在nhibernate中说,当获取一个被引用的实体时,它在join语句中使用了两列,而不是一个? 我有一个类似的表结构

TaskProgress

  • ProgressId
  • 的TaskID
  • AssignmentId
  • 用户ID

任务

  • 的TaskID
  • AssignmentId
  • TASKNAME

每个任务都可以在不同的任务中签名。这意味着任务进度的唯一任务只能由AssignmentId和TaskId字段建立。

我正在尝试使用它:

  References(x => x.Template)
            .Columns()
            .PropertyRef()

但是无法获得如何在多列,任何想法上映射连接?

1 个答案:

答案 0 :(得分:5)

我假设您在示例代码中使用了PropertyRef,这两列不会形成复合主键。如果是这种情况,那么你运气不好,因为property-ref只能接受一个属性。从issue NH-1722中的注释来看,这个功能显然在Hibernate中可用但尚未移植到NHibernate。

更新: 您添加的架构看起来像多对多,在任务和分配之间具有额外的数据关系。 TaskProgress是Task和Assignment之间的链接表。如果TaskProgress没有额外的UserId字段,那么您可以将其建模为简单的多对多。因为链接表有额外的数据,所以它会变得有点复杂。

通常通过创建表示链接表(TaskProgress)的对象并将关系建模为两个一对多关系来建模具有附加数据的多对多数据。也就是说,Task和Assignment与TaskProgress具有一对多的关系。 TaskProgress具有Task,Assignment和User的属性。