2010-11-29 60 views
0

我正在開發一項功能,爲每位客戶添加能力,以便爲其帳戶定義自定義註冊表單,並且遇到了一些障礙爲其中一個對象創建我的Fluent NHibernate映射。從兩個表格中創建單個實體的地圖字段

有兩個表涉及[RegistrationField][AccountRegistrationField][RegistrationField]包含可供選擇的所有字段的靜態列表,以及關於如何渲染字段的一些信息(例如,它應該是文本框,選擇框還是複選框)。 [AccountRegistrationField]包含爲每個帳戶選擇的字段以及有關這些字段的任何帳戶特定信息。該表存儲字段應顯示的順序,如果選擇了該字段,則字段的默認值以及該字段應顯示的標籤。

兩個表的基本結構是:

[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) 

我想要做的就是創建一個對象,以表示[AccountRegistrationField]數據,但也包含從[RegistrationField]幾個領域。對象會是這個樣子:

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 
} 

的SQL查詢給我我想要的是:

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 

,但我真的不知道如何使用功能NHibernate給我這個映射相同的結果。

任何想法,我可以做到這一點,而無需存儲我需要的值從[RegistrationField][AccountRegistrationField]

回答

0

您可以使用join來完成該操作。

我使用XML,但等效的Fluent方法可能被稱爲Join

+0

Join方法奏效,儘管我不得不搜索一下Fluent中的正確語法。 – Hamman359 2010-11-29 19:38:40