在我的数据库中有表分配和工作区,从概念上讲,每项任务都只在一个工作场所进行。 分配表包含一列 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 列。我尝试使用ForeignName
方法,认为我可以通过这种方式指定 WorkplaceName 。如何告诉FH如何加入正确的列?
答案 0 :(得分:2)
解决方案是使用PropertyRef
;该行现在读取:
References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join();
我没有意识到我需要提供对客户端对象的属性 WorkplaceName 的引用,而不是尝试指示映射使用服务器端列 WorkplaceName
答案 1 :(得分:0)
我认为它必须像
References(x => x.Workplace).Column("WorkplaceName")