我正在开发一项功能,为我们的每个客户添加为他们的帐户定义自定义注册表单的功能。我在为其中一个对象创建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
但是我不确定如何使用Fluent NHibernate来映射它以给我相同的结果。
任何想法如何实现这一点,而无需在[RegistrationField]
中[AccountRegistrationField]
存储我需要的值?