Много-к-одному с несколькими столбцами

У меня есть базовая база данных и отношение между двумя таблицами между собой. Дело в том, что отношение использует два столбца, а не одно. Есть ли способ сказать в nhibernate, что при получении ссылочного объекта он использовал два столбца в заявлении объединения, а не один? У меня есть аналогичная структура таблицы

TaskProgress

  • ProgressId
  • TaskId
  • AssignmentId
  • UserId

Задачи

  • TaskId
  • AssignmentId
  • TaskName

Каждая задача может быть назначена в разных назначениях. Это означает, что уникальная задача для достижения задачи может быть основана только на поля AssignmentId и TaskId.

Я пытаюсь использовать это:

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

Но не удается получить, как сопоставить объединение в нескольких столбцах, любые идеи?

Ответ 1

Я исхожу из вашего использования PropertyRef в примере кода, что два столбца не образуют составной первичный ключ. Если это так, то вам не повезло, потому что свойство-ref может принимать только одно свойство. Судя по комментариям в проблеме NH-1722, эта функциональность, по-видимому, доступна в Hibernate, но не была перенесена в NHibernate.

Обновление: Добавленная вами схема выглядит как много-ко-многим, с дополнительными отношениями данных между Task и Assignment. TaskProgress - таблица ссылок между Task и Assignment. Если у TaskProgress не было дополнительного поля UserId, вы могли бы моделировать это как простое для многих. Поскольку таблица ссылок имеет дополнительные данные, она становится немного сложнее.

Многие-ко-многим с дополнительными данными обычно моделируются путем создания объекта, представляющего таблицу связывания (TaskProgress), и моделирования отношения как двух отношений "один-ко-многим". То есть Task и Assignment имеют отношения "один ко многим" с TaskProgress. TaskProgress имеет свойства для задачи, назначения и пользователя.