Быстрое соединение NHibernate, не используя первичный ключ

Я пытаюсь получить единственное свойство из объединяемой таблицы, где неPK в моей основной таблице соединен с PK внешней таблицы. Ниже упрощенный пример того, что я пытаюсь выполнить (я не хочу ссылаться на внешний объект):

Таблицы:

CREATE TABLE Status
(
  Id int,
  Body text,
  CategoryId int
)

CREATE TABLE Category
(
  Id int,
  Name text
)

SQL для генерации:

SELECT Id, Body, CategoryId, Category.Name AS CategoryName
FROM Status
LEFT JOIN Category ON Category.Id = Status.CategoryId

Я пытаюсь отобразить соединение как это в StatusMap, но это, кажется, присоединяется на этих двух первичных ключах (где Состояние. Идентификатор = Категория. Идентификатор):

Join("Category" m =>
{
  m.Optional();
  m.KeyColumn("CategoryId");
  m.Map(x => x.CategoryName, "Name");
});
7
задан jwarzech 9 August 2010 в 17:39
поделиться

1 ответ

Насколько мне известно, единственный способ обойти это с помощью Fluent - это сопоставить с представлением, как вы сейчас делаете. Join () всегда будет отображаться на первичный ключ родительской таблицы. Метод KeyColumn определяет ключевой столбец только для дочерней таблицы, которой в вашем случае является таблица категорий.

Для достижения желаемого SQL с помощью вашей упрощенной версии, приведенной выше, вы, вероятно, захотите использовать Ссылки для определения отношения «многие к одному» между статусом и категорией.

4
ответ дан 7 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

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