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类型的新列,并使用它,但从未成功地使字符串外键工作。