NHibernate-映射字符串外键
我继承的旧数据库包含以下表:NHibernate-映射字符串外键,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我继承的旧数据库包含以下表: Teams ( TeamId INT PRIMARY KEY, Name VARCHAR(30) ) Players ( PlayerId INT PRIMARY KEY, Team VARCHAR(30) ) players表中的外键指的是团队名称,而不是teamId 我曾尝试使用一个包从球队映射到球员: <bag name="Players"> <key column="Team" foreign-key="Name" /
Teams (
TeamId INT PRIMARY KEY,
Name VARCHAR(30)
)
Players (
PlayerId INT PRIMARY KEY,
Team VARCHAR(30)
)
players表中的外键指的是团队名称,而不是teamId
我曾尝试使用一个包从球队映射到球员:
<bag name="Players">
<key column="Team" foreign-key="Name" />
<one-to-many class="DataTransfer.Player, DataTransfer" />
</bag>
但我得到了一个例外:
将varchar值“阿森纳”转换为数据类型int时,转换失败
我已经能够使用包在其他区域映射字符串外键,但在这些情况下,外键引用父表的主键
编辑:我正在使用NHibernate 2.0.1,现在我不能100%确定这是否有效,但您是否尝试过多对一映射关系 也许是这样的:
<many-to-one name="Players" class="DataTransfer.Player, DataTransfer"
column="Name" property-ref="Team" />
根据NHibernate手册,我认为这应该是可行的。属性ref是一个用于映射遗留数据的属性,其中外键指的是关联表的唯一键,而不是主键。这听起来像是您所处的情况。我认为您需要使用property ref属性来定义要关联的字段。外键属性用于生成DDL以创建关系(如果使用该功能)。我认为属性ref属性的存在可以解决此问题
<bag name="Players">
<key column="Team" property-ref="Team" />
<one-to-many class="Player" property-ref="Team" />
</bag>
刚刚发现了这个:,似乎这是NHibernate中的一个bug,它在2.1.0Alpha1中得到了修复
我已经在NHibernate2.1.0Alpha2中试用过了,效果很好
(property ref应该只在map标记中)我尝试了一下,但我得到了错误:找到了多行具有给定标识符的代码:阿森纳,用于类:DataTransfer.Player。我应该提到,我正在映射团队->玩家关系,而不是相反——我已经更新了我的原始问题;Found:Expected:看来NHibernate不支持一对多标记中的property ref属性,而且仅将property ref添加到key标记也不起作用。遗憾的是,将property ref添加到“key”中就足够了。不需要在多对多中使用它,这是不需要的。嗨,我们也遇到了同样的问题,你找到了解决方案吗?我只是为外键创建了一个int类型的新列,并使用它,但从未成功地使字符串外键工作。