NH Соединения сложны и требуют вещей, которые ваша схема может не поддерживать. Например, первичный ключ объединенной таблицы соответствует первичному ключу вашей текущей таблицы. Он работает очень похоже на отображение OneToOne, за исключением того, что NH не создаст явного ограничения на этот эффект. Поскольку в вашем отображении дело обстоит иначе (похоже на ссылку «многие-к-одному»), я сомневаюсь, что вы могли бы сделать явное объединение работающим.
Попробуйте сопоставить свойство "pass-through":
public class Product
{
...
public string ManufacturerName
{
get{return NHibernateUtil.IsInitialized(Manufacturer)
? Manufacturer.Name : manufacturerName;}
set{if(NHibernateUtil.IsInitialized(Manufacturer))
Manufacturer.Name = value
else
manufacturerName = value;}
}
}
...
//In your mapping:
Map(x => x.ManufacturerName, "ManufacturerName");
Это сохранит нормализованное имя производителя в таблице Product в качестве денормализованного поля. Поле также будет существовать в таблице «Производитель». Когда вы получаете ПРОСТО Продукт, вы получаете имя из таблицы Продуктов. После того, как Изготовитель инициализируется по какой-либо другой причине (или загружается), вы получаете имя из таблицы Изготовитель, что означает, что вы можете сохранить имя записи Изготовителя в Продукте.