2010-11-29 3 views
0

Ich arbeite an einer Funktion, um jedem Kunden die Möglichkeit zu geben, ein benutzerdefiniertes Registrierungsformular für sein Konto zu definieren, und ich bin in ein Hindernis geraten Erstellen meiner Fluent-NHibernate-Zuordnung für eines der Objekte.Kartenfelder aus zwei Tabellen, um eine einzige Entität zu erstellen

Es gibt zwei Tabellen [RegistrationField] und [AccountRegistrationField]. [RegistrationField] enthält eine statische Liste aller Felder, aus denen ausgewählt werden kann, sowie einige Informationen zum Rendern des Feldes (z. B. sollte es ein Textfeld, ein Auswahlfeld oder ein Kontrollkästchen sein). [AccountRegistrationField] enthält die Felder, die für jedes Konto ausgewählt wurden, sowie alle kontospezifischen Informationen zu den Feldern. Diese Tabelle speichert die Reihenfolge, in der die Felder angezeigt werden sollen, den Standardwert für das Feld, wenn eines ausgewählt ist, und die Bezeichnung, die für das Feld angezeigt werden soll.

Die Grundstruktur der beiden Tabellen ist:

[RegistrationField] 
fieldID (PK, int, not null) 
fieldName (varchar(50), not null) 
fieldType (varchar(50), not null) 
htmlID (varchar(50), not null) 

[AccountRegistrationField] 
ID (PK, int, not null) 
accountID (FK, int, not null) 
fieldID (FK, int, not null) 
isRequired (bit, not null) 
priority (int, not null) 
label (varchar(50), not null) 
defaultValue (varchar(50), not null) 

Was ich ist zu erstellen, ein Objekt tun möchte, die Daten in [AccountRegistrationField] darzustellen, aber das enthält auch ein paar Felder aus [RegistrationField]. Das Objekt würde wie folgt aussehen:

public class UserRegistrationField 
{ 
    public virtual int ID { get; set; } //from AccountRegistrationField 
    public virtual int AccountID { get; set; } //from AccountRegistrationField 
    public virtual string DefaultValue { get; set; } //from AccountRegistrationField 
    public virtual int FieldID { get; set; } //from AccountRegistrationField 
    public virtual string HtmlID { get; set; } //from RegistrationField 
    public virtual bool IsRequired { get; set; } //from AccountRegistrationField 
    public virtual string Label { get; set; } //from AccountRegistrationField 
    public virtual int Priority{ get; set; } //from AccountRegistrationField 
    public virtual string FieldType { get; set; } //from RegistrationField 
} 

Die SQL-Abfrage mir zu geben, was ich will, ist:

SELECT ar.id 
    ,ar.accountID 
    ,ar.defaultValue 
    ,ar.fieldID 
    ,rf.htmlID 
    ,ar.isRequired 
    ,ar.label 
    ,rf.fieldType 
FROM AccountRegistrationFields ar 
INNER JOIN RegistrationFields rf ON rf.fieldID = ar.fieldID 
WHERE ar.accountID = @AccountID 
ORDER BY ar.priority 

aber ich bin nicht wirklich sicher, wie dies Fluent NHibernate kartieren, um mich das gleiche Ergebnis.

Irgendwelche Ideen, wie ich das erreichen kann, ohne die Werte zu speichern, die ich brauche von [RegistrationField] in [AccountRegistrationField]?

Antwort

0

Sie können join verwenden, um dies zu erreichen.

Ich verwende XML, aber die entsprechende Fluent-Methode wird wahrscheinlich Join genannt.

+0

Die Join-Methode funktionierte, obwohl ich nach etwas suchen musste, um die korrekte Syntax in Fluent herauszufinden. – Hamman359

+0

@ Hamman359: Sorge dafür, es zu liefern? –