FluentNHibernate - Zuordnung einer Klasse zu mehreren Tabellen

Entschuldigung für eine lange Frage. Aber es lohnt sich, alle Details anzugeben, also bitte bis zum Ende bei mir bleiben.

Ich arbeite gegen eine alte Datenbank, über die ich nicht viel Kontrolle habe. Ich möchte eine Klasse mehreren Datenbanktabellen zuordnen können. So sehen meine Tische aus

Lookup

+--------+--------------+------------+
| Column |   DataType   | Attributes |
+--------+--------------+------------+
| Id     | INT          | PK         |
| Code   | NVARCHAR(50) |            |
+--------+--------------+------------+

Culture

+--------------+--------------+------------+
|    Column    |   DataType   | Attributes |
+--------------+--------------+------------+
| Id           | INT          | PK         |
| Culture_Code | NVARCHAR(10) |            |
+--------------+--------------+------------+

Lookup_t9n

+----------------+---------------+---------------------+
|     Column     |   DataType    |     Attributes      |
+----------------+---------------+---------------------+
| Id             | INT           | PK                  |
| Culture_Id     | INT           | FK to Culture table |
| Localised_Text | NVARCHAR(MAX) |                     |
+----------------+---------------+---------------------+

Wie Sie sehen, habe ich eine Nachschlagetabelle, in der alle Nachschläge gespeichert sind. Der Anzeigetext für eine Suche wird lokalisiert und in einer separaten Tabelle gespeichert. Diese Tabelle enthält einen Fremdschlüssel für die Kulturtabelle, um die Kultur anzugeben, für die der lokalisierte Text vorhanden ist.

Meine Klasse sieht so aus

public class Lookup {

    public virtual int Id {get; set;}

    public virtual string Code {get; set;}

    public virtual string DisplayText {get; set;}
}

Und meine FNH-Mapping-Klasse sieht so aus

public class LookupMappings : ClassMap<Lookup> {

    public LookupMappings()
    {
        Table("Lookup");
        Id(x => x.Id).Column("Id");
        Map(x => x.Code).Column("Code");

        Join("Lookup_t9n", join => {
            join.Map(x => x.DisplayText).Column("Localised_Text"); //Note this place, my problem is here
        })
    }
}

In der obigen Abbildung wird inJoin Zum Teil möchte ich einige where-Klauseln wie liefernWHERE Lookup_t9n.Culture_Id = Culture.Culture_Id AND Culture.Culture_Code = System.Threading.Thread.CurrentUICulture.CultureCode.

Ich weiß, dass dies kein gültiges SQL ist, aber es vermittelt die Absicht, die ich hoffe. Hat jemand Erfahrung damit.

Ich kann einen Mapping-Layer hinzufügen, in dem ich Klassen mit Datenbanktabellen eins zu eins mappen und dann einfaches c # schreiben kann, um diese Klassen meinem zuzuordnenLookup Klasse. Ich habe das eher als Zwischenlösung getan. Ich habe mich gefragt, ob ich diese Mapping-Ebene mit einer intelligenten NH-Verwendung entfernen kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage