6

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

这是架构:

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列。我尝试使用该方法,认为我可以通过这种方式指定WorkplaceName。如何告诉 FH 如何加入正确的列?ForeignName

4

2 回答 2

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的引用,而不是尝试指示映射使用服务器端列WorkplaceName

于 2012-11-16T12:24:20.010 回答
0

我想它一定是这样的

References(x => x.Workplace).Column("WorkplaceName")

于 2012-11-16T11:06:10.813 回答