many-one с несколькими столбцами

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

TaskProgress

  • ProgressId
  • TaskId
  • AssignmentId
  • UserId

Задачи

  • TaskId
  • AssignmentId
  • TaskName

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

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

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

Но не может добраться, как отобразить соединение на нескольких столбцах, каких-либо идеях?

10
задан Sly 3 June 2010 в 07:08
поделиться

1 ответ

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

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

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

5
ответ дан 4 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: