У меня есть унаследованная база данных и отношение, непосредственное между двумя таблицами. Вещь состоит в том, что отношение использует два столбца, не один. Там некоторый путь состоит в том, чтобы сказать в nhibernate, что при получении объекта, на который ссылаются, использовал два столбца в операторе соединения, не один? У меня есть подобная структура таблицы
TaskProgress
Задачи
Каждая задача может быть присвоена в различных присвоениях. Это означает, что уникальная задача для прогресса задачи может быть основана только полями AssignmentId и TaskId.
Я пытаюсь использовать это:
References(x => x.Template)
.Columns()
.PropertyRef()
Но не может добраться, как отобразить соединение на нескольких столбцах, каких-либо идеях?
Исходя из использования PropertyRef в коде примера, я предполагаю, что два столбца не образуют составной первичный ключ. Если это так, то вам не повезло, поскольку property-ref может принимать только одно свойство. Судя по комментариям в issue NH-1722, эта функциональность, очевидно, доступна в Hibernate, но не была перенесена в NHibernate.
Обновление: Схема, которую вы добавили, выглядит как многие-ко-многим с дополнительными отношениями данных между Task и Assignment. TaskProgress является связующей таблицей между Task и Assignment. Если бы TaskProgress не имел дополнительного поля UserId, то вы могли бы смоделировать это как простое отношение "многие-ко-многим". Поскольку связующая таблица содержит дополнительные данные, все становится немного сложнее.
Отношения многие-ко-многим с дополнительными данными обычно моделируются путем создания объекта, представляющего связующую таблицу (TaskProgress), и моделирования отношений как двух отношений один-ко-многим. То есть, Task и Assignment имеют отношения один-ко-многим с TaskProgress. TaskProgress имеет свойства для Task, Assignment и User.