2010-11-29 57 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