将外键映射到主键以外的其他键

wal*_*pus 6 .net nhibernate fluent-nhibernate

在我的数据库中有表AssignmentWorkplace,从概念上讲,每个作业都在一个工作场所进行.该分配表中包含一列工作场所,这是一个外键引用的职场表的WorkplaceName列.

这是架构:

table Workplace (
  ID int primary key,
  WorkplaceName int
)

table Assignment (
  Workplace int
)
Run Code Online (Sandbox Code Playgroud)

我的映射:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

在运行时我得到了异常

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

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

wal*_*pus 2

我在这里找到了答案:FluentNHibernate Many-To-One References where外键不是主键并且列名不同

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

References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join();
Run Code Online (Sandbox Code Playgroud)

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