4

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

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

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

球员表中的外键指的是球队名称,而不是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

4 回答 4

3

I think the property-ref attribute exists to solve this problem.

<bag name="Players">
   <key column="Team" property-ref="Team" />
   <one-to-many class="Player" property-ref="Team" />
</bag>
于 2009-01-20T19:11:01.260 回答
3

现在我不能 100% 确定这是否可行,但您是否尝试过多对一映射关系?

也许是这样的:

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

我相信这应该有效,根据 NHibernate 手册,property-ref 是一个用于映射遗留数据的属性,其中外键是指关联表的唯一键而不是主键。这听起来像你发现自己的情况。

于 2009-01-20T18:28:42.063 回答
0

我相信您需要使用 property-ref 属性来定义您将关联的字段。外键属性用于生成 DDL 以创建关系(如果您使用该功能)。

于 2009-01-20T18:34:06.343 回答
0

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

我已经在 NHibernate 2.1.0Alpha2 中尝试过,它可以工作!

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

于 2009-04-20T10:06:34.330 回答