Сопоставьте поля из двух таблиц, чтобы создать единый объект - PullRequest
0 голосов
/ 29 ноября 2010

Я работаю над функцией, позволяющей каждому из наших клиентов определить настраиваемую форму регистрации для своей учетной записи, и я столкнулся с некоторым препятствием при создании сопоставления 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

, но я не совсем уверен, как отобразить это с помощью FluentNHibernate, чтобы дать мне тот же результат.

Любые идеи, как я могу сделать это без необходимости хранить нужные мне значения от [RegistrationField] в [AccountRegistrationField]?

1 Ответ

0 голосов
/ 29 ноября 2010

Для этого можно использовать join .

Я использую XML, но эквивалентный метод Fluent, вероятно, называется Join.

...