我继承的遗留数据库包含以下表:
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 回答
我认为property-ref属性存在以解决这个问题 .
现在我不是百分百确定这是否可行,但你尝试过多对一的映射关系吗?
也许是这样的:
我认为应该可行,根据NHibernate手册,property-ref是一个用于映射遗留数据的属性,其中外键引用除主键之外的关联表的唯一键 . 这听起来像你发现自己的情况 .
我相信您需要使用property-ref属性来定义要关联的字段 . foreign-key属性用于生成DDL以创建关系(如果使用该功能) .
刚发现这个:https://nhibernate.jira.com/browse/NH-1272,似乎这是NHibernate中的一个错误,它在2.1.0Alpha1中得到修复 .
我在NHibernate 2.1.0Alpha2中试过它,它可以工作!
(property-ref应该只在map标签中)