Я использую Быстрый 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");
});
Раньше я не использовал 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 в сопоставленном объекте, поэтому соединение не будет работать. Я предлагаю создать представление, объединяющее клиента и язык, и сопоставить это.