NHibernate的映射:有额外的限制

问题描述:

引用可以说我有这个类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方法显然不存在。我需要添加这个约束,因为我可能有第三个表可能有重复的主键。 是这样的可能吗?

小编辑

约束为常数,我不想引用另一列(这将不存在)

+0

提示的关键特性:确保所有你的模型的属性和方法是'虚拟'的。 –

+0

过滤器是否适合您? https://weblogs.asp.net/ricardoperes/lesser-known-nhibernate-features-filters –

+0

@FelipeOriani你是对的。我忘了这篇文章的目的 – ZrSiO4

好吧,我已经找到一种方法来做到这一点,似乎工作正常。

当映射参考实体属性,我添加了一个公式来约束这样的

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