如何使用 NHibernate Mapping.ByCode 联接非主键字段上的表

本文关键字:字段 NHibernate 何使用 Mapping ByCode | 更新日期: 2023-09-27 17:57:13

我有一个员工表:

Employee
{
    Name
    EmployeeId -pk
    PositionId -fk
}

位置 ID 映射到位置表:

Position
{
    PositionId -pk
    ReportsToId
    PositionName
    PositionDescription
}

"报告到 ID"字段是该职位经理的职位 ID。

我想选择一名员工,他们的职位和他们的经理详细信息。

如何使用NHibernate的Mapping.ByCode完成此操作。

"报告到 ID"字段不是关键字段。从我在网上读到的内容来看,这似乎影响了映射......

如何使用 NHibernate Mapping.ByCode 联接非主键字段上的表

在这种情况下,映射将按 5.1.10 进行。 多对一,具有称为property-ref的功能:

<many-to-one
    ...
    property-ref="PropertyNameFromAssociatedClass"     (7)

(7) property-ref :(可选)连接到此外键的关联类的属性的名称。如果未指定,则使用关联类的主键。

因此,Position 类应具有 ID 和属性ReportsToId

public virtual int ID          { get; set; }
public virtual int ReportsToId { get; set; }

员工 C# 类将具有以下属性:

public virtual Position ManagerPosition { get; set; }

员工财产ManagerPosition的映射将是(参见:Adam Bar,按代码映射 - ManyToOne)

ManyToOne(x => x.ManagerPosition , m =>
{ 
    ...             
    m.Column("PositionId") // column in the Employee table
    m.PropertyRef(propertyReferencedName) // the Property/column in the Position table