В сопоставлениях XML вы сопоставляете отношения между вашими классами. Только если ваши классы имеют такое отношение:
class Class1
{
public Class2 { get; set; }
}
Вы можете сопоставить это отношение. НО это обычно должно быть связано с использованием первичных ключей. Существует также способ сопоставить другие свойства, используя property-ref
, но там он становится странным, особенно если в него входят несколько столбцов.
Я сомневаюсь, что у вас есть такое отношение в ваших классах в любом случае.
Таким образом, ссылка должна быть сделана только в запросе. Это похоже на то, как вы это делаете в SQL. Обратите внимание, что «соединения» в HQL ограничены действительными отношениями (как я уже показал выше), а не произвольным сопоставлением свойств (в отличие от SQL, где нет разницы).
HQL:
select c1.*, c2.ProductionDate
from Class1 c1, Class2 c2
where c1.Name = c2.Name and c1.Price = c2.Price
Это не представляется возможным критериям (за исключением использования подзапросов, но тогда вы не можете вернуться ProductionDate). Невозможно сделать это внешним соединением, кроме как вернуться к SQL.
Комментарий: Вы можете думать, что NHibernate здесь не очень помогает. Это действительно так. Причина в том, что NHibernate является ORM и позволяет реализовать бизнес-логику объектно-ориентированным способом. Вид, который вы здесь имеете, не является типичным объектно-ориентированным отношением. Это не так, как обычно вы имеете дело с классами в чистом дизайне OO.
спасибо за информативный ответ! Я закончил использование запроса в xml-части. Я сделал это так, поэтому я могу изменить ссылку в моем коде на конкретный файл. Мне нужно, чтобы он оставался совместимым с различными версиями базы данных. – Franki1986