【问题标题】:Mapping a foreign key to something other than a primary key将外键映射到主键以外的东西
【发布时间】:2012-11-05 02:15:24
【问题描述】:

在我的数据库中有 AssignmentWorkplace 表,从概念上讲,每项任务都在一个工作场所进行。 Assignment 表包含 Workplace 列,该列是引用 Workplace 表的 WorkplaceName 列的外键。 p>

这是架构:

table Workplace (
  ID int primary key,
  WorkplaceName int
)

table Assignment (
  Workplace int
)

还有我的映射:

class Workplace
{
  public virtual int ID { get; set; }
  public virtual int WorkplaceName { get; set; }
} 

class Assignment 
{
  public virtual Workplace { get; set; }
}

class AssignmentMap : ClassMap<Assignment>
{
  public AssignmentMap()
  {
    References(a => a.Workplace);
  }
}

在运行时出现异常

不存在具有给定标识符的行[MyProject.Workplace#2001]

这里的问题似乎是 FH 在 Workplace.ID 列中查找 Assignment.Workplace 属性的值,即表的主键;正确的位置是 Workplace.WorkplaceName 列。我尝试使用ForeignName 方法,认为我可以通过这种方式指定WorkplaceName。如何告诉 FH 如何加入正确的列?

【问题讨论】:

    标签: .net nhibernate fluent-nhibernate


    【解决方案1】:

    我觉得应该是这样的

    References(x =&gt; x.Workplace).Column("WorkplaceName")

    【讨论】:

    • 我试过了;它不会改变结果。我相信 Column 方法用于指定本地列名,与 References 的第二个参数相同 - 不过我可能错了。
    【解决方案2】:

    我在这里找到了答案:FluentNHibernate Many-To-One References where Foreign Key is not to Primary Key and column names are different

    解决方案是使用PropertyRef;该行现在显示:

    References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join();
    

    我没有意识到我需要提供对客户端对象属性 WorkplaceName 的引用,而不是尝试指示映射使用服务器端列 工作场所名称

    【讨论】:

      猜你喜欢
      • 2014-07-02
      • 1970-01-01
      • 2019-09-13
      • 2017-08-06
      • 2018-11-28
      • 2014-05-26
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多