Fluent-nHibernate映射与三元映射表

Fluent-nHibernate映射与三元映射表,nhibernate,fluent-nhibernate-mapping,ternary,Nhibernate,Fluent Nhibernate Mapping,Ternary,拥有一个具有如下映射表结构的遗留数据库。我正试图找出如何流畅地映射这种关系 有多个父表使用映射表存储注释 父表如下所示: P1表 身份证 P2表 ID等距 有一个映射表,它将获取父表并将其映射到注释表。 映射表 ID i_RecordUniqueID 我不知道 身份证 列i_RecordID包含一个数值,指示i_RecordUniqueID值来自哪个父表。映射表只有这三列,是三元主键 以下是注释表: 注释表 我不知道 查找表P1注释的查询如下: Select n.* from P1 p inne

拥有一个具有如下映射表结构的遗留数据库。我正试图找出如何流畅地映射这种关系

有多个父表使用映射表存储注释

父表如下所示: P1表 身份证

P2表 ID等距

有一个映射表,它将获取父表并将其映射到注释表。 映射表 ID i_RecordUniqueID 我不知道 身份证

列i_RecordID包含一个数值,指示i_RecordUniqueID值来自哪个父表。映射表只有这三列,是三元主键

以下是注释表: 注释表 我不知道

查找表P1注释的查询如下:

Select n.*
from P1 p
inner join Mapping m on p.iSomething = m.i_RecordUniqueID and m.i_RecordID = 1
inner join Note n on m.i_NoteID = n.i_NoteID
Select n.*
from P2 p
inner join Mapping m on p.iSomething = m.i_RecordUniqueID and m.i_RecordID = 2
inner join Note n on m.i_NoteID = n.i_NoteID
查找表P2注释的查询如下:

Select n.*
from P1 p
inner join Mapping m on p.iSomething = m.i_RecordUniqueID and m.i_RecordID = 1
inner join Note n on m.i_NoteID = n.i_NoteID
Select n.*
from P2 p
inner join Mapping m on p.iSomething = m.i_RecordUniqueID and m.i_RecordID = 2
inner join Note n on m.i_NoteID = n.i_NoteID
在我的父表映射文件中,我有一个如下所示的关联。我不知道如何添加I_RecordID约束

HasManyToMany<Note>(x => x.Notes)
  .Table("Mapping")
  .ParentKeyColumn("i_RecordUniqueID")
  .ChildKeyColumn("i_NoteID")
  .Cascade.All();

FluentNHibernatew尚不支持许多映射。您可以将其映射为只读访问

// P1Map()
HasManyToMany(x => x.Notes)
  .Table("Mapping")
  .ParentKeyColumn("i_RecordUniqueID")
  .Where("i_RecordID == 1")
  .ChildKeyColumn("i_NoteID")
  .Cascade.All();

// P2Map()
HasManyToMany(x => x.Notes)
  .Table("Mapping")
  .ParentKeyColumn("i_RecordUniqueID")
  .Where("i_RecordID == 2")
  .ChildKeyColumn("i_NoteID")
  .Cascade.All();
或者您必须创建一个组件

ICollection<TableToNote> Notes;

public TableToNoteMap()
{
    ReferencesAny(x => x.Parent).IdentityColumn("i_RecordUniqueID").MetaTypeColumn("i_RecordID")...;

    References(x => x.Note);
}