Я пытаюсь получить единственное свойство из объединяемой таблицы, где не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");
});
Насколько мне известно, единственный способ обойти это с помощью Fluent - это сопоставить с представлением, как вы сейчас делаете. Join ()
всегда будет отображаться на первичный ключ родительской таблицы. Метод KeyColumn определяет ключевой столбец только для дочерней таблицы, которой в вашем случае является таблица категорий.
Для достижения желаемого SQL с помощью вашей упрощенной версии, приведенной выше, вы, вероятно, захотите использовать Ссылки
для определения отношения «многие к одному» между статусом и категорией.