代码之家  ›  专栏  ›  技术社区  ›  Sly

多列多对一

  •  10
  • Sly  · 技术社区  · 14 年前

    我有一个遗留数据库和两个表之间的一一对应关系。问题是关系使用两列,而不是一列。在nhibernate中,有什么方法可以说,当获取引用实体时,它在join语句中使用了两列,而不是一列? 我有类似的桌子结构

    任务进展

    • 进步派
    • 塔斯基德
    • 赋值
    • 用户标识

    任务

    • 塔斯基德
    • 赋值
    • 绰号

    每项任务都可以在不同的任务中指定。这意味着任务进度的唯一任务只能由assignmentid和taskid字段创建。

    我想用这个:

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

    但是无法得到如何在多个列上映射连接,有什么想法吗?

    1 回复  |  直到 12 年前
        1
  •  5
  •   Cole W    12 年前

    我假设从示例代码中对propertyref的使用来看,这两列不构成复合主键。如果是这种情况,那么您就走运了,因为属性引用只能接受一个属性。从中的评论判断 issue NH-1722 ,此功能显然在休眠时可用,但尚未移植到nhibernate。

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

    带有附加数据的多对多建模通常是通过创建表示链接表(taskprogress)的对象并将关系建模为两个一对多关系来实现的。也就是说,任务和工作分配与任务进度有一对多的关系。任务进度具有任务、分配和用户的属性。