首页 文章

NHibernate - 映射字符串外键

提问于
浏览
4

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

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

    我认为property-ref属性存在以解决这个问题 .

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

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

    也许是这样的:

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

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

  • 3

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

  • 3

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

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

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

相关问题