У нас есть устаревшая схема базы данных, которую я попытался (безуспешно) сопоставить с NHibernate. Чтобы привести упрощенный пример, скажем, я хочу класс Person, имя которого происходит из таблицы «Person», а их фамилия происходит из таблицы «Person2». В таблице «Person» также есть Id этого человека, и я хочу, чтобы у моего класса Person было свойство Car. Я могу сопоставить все это, используя следующее:
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="NHibernateMappingTest.Person, NHibernateMappingTest" lazy="false">
<id name="Id" >
<generator class="native" />
</id>
<property name="FirstName" />
<many-to-one name="Car" access="property" class="NHibernateMappingTest.Car, NHibernateMappingTest" column="CarId" cascade="save-update"/>
<join table="Person2">
<key column="PersonId" />
<property name="LastName" />
</join>
</class>
</hibernate-mapping>
Позволяет мне комбинировать таблицы Person и Person2, и позволяет мне находить их Автомобиль - все работает отлично.
Но ... если в таблице Person2 есть HouseId этого человека, я бы хотел добавить второй элемент в мое отображение ...
<many-to-one name="House" access="property" class="NHibernateMappingTest.House, NHibernateMappingTest" column="HouseId" cascade="save-update"/>
... чтобы мой класс Person мог иметь свойство House.
Однако именно здесь все идет не так, потому что SQL, который генерирует NHibernate, предполагает, что столбец HouseId находится в таблице Person (но это не так, это в Person2), поэтому я получаю следующую ошибку:
MySql.Data.MySqlClient.MySqlException: # 42S22Неизвестный столбец 'HouseId' в 'списке полей'
Может ли NHibernate делать то, что я пытаюсь сделать, есть ли другой способ добиться этого (без изменения схемы базы данных), или я только что сделал ошибку новичка в моем файле карты?