NHibernate - 映射字符串外键

时间:2009-01-20 17:32:49

标签: nhibernate nhibernate-mapping

我继承的遗留数据库包含以下表格:

Teams ( 
 TeamId INT PRIMARY KEY,
 Name VARCHAR(30)
)

Players (
 PlayerId INT PRIMARY KEY,
 Team VARCHAR(30)
)

player表中的外键是指团队名称,而不是teamId。

我尝试使用行李从团队映射到玩家:

<bag name="Players">
    <key column="Team" foreign-key="Name" />
    <one-to-many class="DataTransfer.Player, DataTransfer" />
</bag>

但是我得到了SqlException:     将varchar值'Arsenal'转换为数据类型int

时转换失败

我已经能够使用包来映射其他区域中的字符串外键,但在这些情况下,外键引用父表的主键。

编辑:我正在使用NHibernate 2.0.1

4 个答案:

答案 0 :(得分:3)

现在我不是百分百确定这是否可行,但你尝试过多对一的映射关系吗?

也许是这样的:

<many-to-one name="Players" class="DataTransfer.Player, DataTransfer"
             column="Name" property-ref="Team" />

我认为应该可行,根据NHibernate手册,property-ref是一个用于映射遗留数据的属性,其中外键引用除主键之外的关联表的唯一键。这听起来像你发现自己的情况。

答案 1 :(得分:3)

我认为property-ref属性的存在是为了解决这个问题。

<bag name="Players">
   <key column="Team" property-ref="Team" />
   <one-to-many class="Player" property-ref="Team" />
</bag>

答案 2 :(得分:0)

我认为您需要使用property-ref属性来定义要关联的字段。 foreign-key属性用于生成DDL以创建关系(如果使用该功能)。

答案 3 :(得分:0)

刚刚发现:https://nhibernate.jira.com/browse/NH-1272,似乎这是NHibernate中的一个错误,它在2.1.0Alpha1中修复。

我在NHibernate 2.1.0Alpha2中试过它,它有效!

(property-ref应该只在map标签中)