流畅的NHibernate连接表不在主键上

时间:2012-05-15 07:58:13

标签: c# sql nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在尝试从DB连接两个表,但我需要在指定的列(而不是键)上加入它们。 表格如下:

EmplTable: Id, EmplId, FirstName, LastName
LoginTable: Id, EmplLoginId, Login

域对象员工:

public class Employee
{
    public virtual int Id { get; set; }
    public virtual String FirstName { get; set; }
    public virtual String LastName { get; set; }
    public virtual String Login { get; set; }
}

我的映射看起来像:

public EmployeeMap()
{
    Table("EmplTable");
    Id(x => x.Id).Column("Id");
    Map(x => x.FirstName).Column("FirstName");
    Map(x => x.LastName).Column("LastName");
    Join("LoginTable", m =>
    {
        m.Fetch.Join();
        m.KeyColumn("EmplId");
        m.Map(t => t.Login).Column("Login");
    });
}

我要做的是在 EmplTable.EmplId = LoginTable.EmplLoginId 上连接表格 如何将加入列从 ID 更改为 EmplId

1 个答案:

答案 0 :(得分:1)

您可以将其映射为many-to-one并将其映射为:

public EmployeeMap() {
    Table("EmplTable");
    Id(x => x.Id).Column("Id");
    Map(x => x.FirstName).Column("FirstName");
    Map(x => x.LastName).Column("LastName");
    References(x => x.Login, "EmplId")
        .Fetch.Join(); 
}

然后,您需要使用LoginTable

中的属性创建一个Login对象

编辑:

我不认为NHibernate目前可以做到这一点,因此不能使用Fluent NHibernate。

https://nhibernate.jira.com/browse/NH-1452
https://nhibernate.jira.com/browse/NH-3143