Быстрые NHibernate присоединяются к отдельному столбцу от другой таблицы

Я использую Быстрый NHibernate и имею две таблицы;

Клиент [идентификатор, имя, LanguageID]

Языки [идентификатор, описание]

У меня есть Клиентский объект со следующими свойствами; идентификатор, Имя, LanguageID, Язык

То, что я хотел бы сделать, должно соединить с таблицей Languages, чтобы получить описание языка и поместить его в свойство языка клиентского объекта.

Я попытался использовать Соединение, но я не могу заставить его использовать поле LanguageID на клиентской таблице для соединения с таблицей Languages - это продолжает желать использовать 'идентификатор'.

Мое отображение похоже;

        Table("Customers");
        Not.LazyLoad();
        Id(c => c.ID).GeneratedBy.Assigned();
        Map(c => c.Name);
        Map(c => c.LanguageID);
        Join("Languages", join =>
        {
            join.KeyColumn("ID");
            join.Map(prop => prop.Language).Column("Description");
        });
13
задан Brian Tompsett - 汤莱恩 22 May 2017 в 09:06
поделиться

1 ответ

Раньше я не использовал Join, но думаю, вам нужен внешний ключ от клиента в вашем сопоставлении:

    Table("ScriptActivities");
    Not.LazyLoad();
    Id(c => c.ID).GeneratedBy.Assigned();
    Map(c => c.Name);
    Map(c => c.LanguageID);
    Join("Languages", join =>
    {
        join.KeyColumn("LanguageID");
        join.Map(prop => prop.Language).Column("Description");
    });

Отредактировано для добавления: лучший пример, который я мог найти на сопоставлении соединений можно в блоге Айенде . Из этого примера мне кажется, что соединение ожидает, что идентификатор сопоставленного объекта будет внешним ключом в объединенной таблице. Ваша схема имеет идентификатор объединенной таблицы как FK в сопоставленном объекте, поэтому соединение не будет работать. Я предлагаю создать представление, объединяющее клиента и язык, и сопоставить это.

1
ответ дан 2 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

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