2012-04-12 7 views
0

Haben Sie eine Legacy-Datenbank mit Mapping-Tabellenstrukturen wie folgt. Ich versuche herauszufinden, wie man diese Art von Beziehung fließend abbildet.Fließende nHibernate Mapping mit Ternary Mapping Tabelle

Es gibt mehrere übergeordnete Tabellen, die eine Zuordnungstabelle zum Speichern von Notizen verwenden.

Die übergeordneten Tabellen wie folgt aussehen:
P1 Tabelle
ID iSomething

P2 Tabelle
ID iSomethingElse

Es gibt eine Zuordnungstabelle, die eine übergeordnete Tabelle nehmen und Ordnen Sie es einer Notizentabelle zu.
Mapping Table
ID i_RecordUniqueID
ID i_NoteID
ID i_RecordID

Die Spalte i_RecordID einen numerischen Wert enthält, der anzeigt, welche der übergeordneten Tabelle i_RecordUniqueID Wert herkommt. Die Zuordnungstabelle hat nur diese drei Spalten und ist ein ternärer Primärschlüssel. Hier

ist die Notentabelle:
Anmerkung Tabelle
ID i_NoteID

Die Abfragetabelle P1 Notizen zu finden, ist wie folgt:

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 

Die Abfragetabelle P2 Notizen zu finden ist wie folgt:

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 

In meiner Zuordnungsdatei für Elterntabellen habe ich eine Zuordnung wie die folgende. Ich weiß nicht, wie ich die i_RecordID-Einschränkung hinzufügen kann.

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

Antwort

0

FluentNHibernatew unterstützt noch nicht ManyToAny Mapping. Sie könnte es für Nur-Lese-Zugriff Karte

// 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(); 

oder haben Sie eine Komponente

ICollection<TableToNote> Notes; 

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

    References(x => x.Note); 
} 
erstellen