我们有一个遗留的数据库模式,我尝试过(不成功)用NHibernate进行映射。为了给出一个简化的例子,说我想要一个名字来自“Person”表的Person类,但他们的姓氏来自“Person2”表。 “Person”表中还有该人的Car的Id,并且我希望我的Person类具有Car属性。我可以使用以下内容映射所有内容:我可以将两个表“连接”到一个类中,同时使用NHibernate创建多对一的关系吗?
<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"/>
...所以我人员类可以有房屋属性。
但是这是一切都出错的地方,因为NHibernate生成的SQL假定HouseId列在Person表中(但它不是,它在Person2中),所以我得到以下错误;
MySql.Data.MySqlClient.MySqlException:#42S22Unknown列“字段列表”
是NHibernate的能够做什么,我试图“HouseId”,是有不同的方式来实现这一目标(不改变数据库模式),还是我刚刚在我的地图文件中犯了一个初学者的错误?
您是否在Person2连接表元素中放置了多对多的房屋映射? – 2009-05-20 17:08:54