По той же самой причине я использовал явные свойства A.B-ID для всех моих отношений многие-к-одному. Я не рассматриваю это как быстрое и грязное решение, так как оно обеспечивает решение этой проблемы, а также большую гибкость в области сохранения и обновления, т.е. мне не нужно извлекать из базы данных объект B, просто чтобы назначить его A в Чтобы создать ассоциацию, когда у меня есть B_ID в строке запроса или где-то еще.
Мои файлы сопоставления обычно выглядят так:
<property name="CreatorID" column="CreatorID" type="Int32" not-null="true" />
<many-to-one name="Creator" column="CreatorID" class="SystemUser" insert="false" update="false" cascade="none" />
Как вы можете видеть, одно из двух свойств должно быть прочитано только для того, чтобы NHibernate 2 раза не отправлял этот столбец в базу данных, когда происходит вставка или обновление. Вышеприведенное делает только для чтения (используя атрибуты insert = "false" update = "false") много-к-одному, но вместо этого вы можете иметь свойство CreatorID только для чтения, если хотите.
Имея только много-к-одному, у вас нет свойства в вашем классе сущности A для хранения значения B.ID. Единственный способ получить это - получить доступ к объекту B, который запустит прокси-сервер и отправит запрос к базе данных (если он еще не загружен в сеансе).
Я буду рад услышать любую другую опцию, которая предлагает решение и предлагает такую же гибкость.