NHibernate явное свободное сопоставление столбцов

У меня есть набор сопоставлений объектов, которые выглядят так:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Map(x => x.Id);
        Map(x => x.Status);
    }
}

public class SpecialUserMap : SubClassMap<SpecialUser>
{
    public SpecialUserMap()
    {
        Map(x => x.Property);
    }
}

public class DirectoryMap : ClassMap<Directory>
{
    public DirectoryMap
    {
        Map(x => x.Id);
        HasMany(x => x.SpecialUsers).Where("Status = 0");
    }
}

Пользователь - это объединяемая таблица, к которой присоединяется SpecialUser, чтобы получить такие вещи, как статус. Однако, когда я пытаюсь сослаться на SpecialUser в коллекции SpecialUsers каталога, я получаю сообщение об ошибке «Неопределенный столбец« Статус »», как и в сгенерированном SQL, NHibernate пытается получить столбец Status из таблицы SpecialUser, а не из таблицы User. . Есть ли способ явно указать NHibernate, какая таблица должна получить столбец статуса в DirectoryMapping?


person intervigil    schedule 14.12.2009    source источник


Ответы (2)


Свойство Status пользователя / SpecialUser необходимо сопоставить с одним столбцом в базе данных. Вы не можете получить его иногда от пользователя, а иногда от SpecialUser.

В качестве обходного пути вы можете добавить свойство SpecialUserStatus в SpecialUser, и тогда вы можете легко запросить это.

person John Rayner    schedule 15.12.2009
comment
База данных внизу имеет только один столбец состояния, который находится в таблице пользователей. - person intervigil; 15.12.2009

Это сопоставление выглядит правильным для сопоставления table-per-subclass, предполагая, что SpecialUser расширяет User. Я предполагаю, что это ошибка.

person Jamie Ide    schedule 15.12.2009