【问题标题】:Fluent NHibernate Join Table not on primary KeyFluent NHibernate Join Table 不在主键上
【发布时间】:2012-05-15 07:58:12
【问题描述】:

我正在尝试从 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 上连接表 如何将 Join 列从 Id 更改为 EmplId

【问题讨论】:

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


    【解决方案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 中的属性创建一个登录对象

    编辑:

    我认为目前 NHibernate 无法做到这一点,因此 Fluent NHibernate 也无法做到这一点。

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

    【讨论】:

    • 重点是我想避免为 LoginTable 创建新对象。我使用 Property-ref 找到了类似的解决方案,但我认为这适用于 NHibernate,而不是 Flunet NHibernate。
    • 你是对的。因此,您给我的解决方案可能是解决问题的最佳方法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2015-08-23
    • 2014-05-26
    • 2023-03-12
    • 2010-11-24
    • 2018-06-24
    • 2023-03-03
    相关资源
    最近更新 更多