NHibernate映射:具有附加约束的引用



假设我有这个类

public class LinkingTable
{
    public int PrimaryKey { get; set; }
    public int LinkFk { get; set; }
    public string LinkTable { get; set; }
    public OtherTable OtherTable { get; set; }
}

和其他一些类

public class OtherTable
{
    public int PrimaryKey { get; set; }
    ... other properties
}

映射看起来像这样

LinkingTableMap() : ClassMap<LinkingTable>
{
    Id(x => x.PrimaryKey);
    Map(x => x.LinkFK);
    Map(x => x.LinkTable);
    References(x => x.OtherTable, nameof(LinkingTable.LinkFk));
}
OtherTableMap() : ClassMap<OtherTable>
{
    Id(x => x.PrimaryKey);
    ... other mappings
}

我想在 LinkingTableMap 中的 OtherTable 引用中添加一个约束。类似的东西

References(x => x.OtherTable, nameof(LinkingTable.LinkFk)).Where(x => x.LinkTable == "OtherTable");

Where 方法显然不存在。我需要添加此约束,因为我可能有第三个表可能有重复的主键。这样的事情可能吗?

小编辑

约束是常量,我不想引用另一列(不存在(

好的,我找到了一种似乎工作正常的方法。

将引用映射到实体属性时,我添加一个公式来约束键属性,如下所示

References(x => x.OtherTable).Formula("(case when LinkTable = 'OtherTable' then LinkFk else 0 end)")

这导致 sql 看起来像这样

select * 
from [LinkingTable] linkingTable
left outer join [OtherTable] otherTable on (case when linkingTable.LinkTable = 'OtherTable' then linkingTable.LinkFk else 0 end)=otherTable.PrimaryKey

相关内容

  • 没有找到相关文章

最新更新