Как получить два сопоставления для одной и той же таблицы в Fluent nHibernate? - PullRequest
0 голосов
/ 10 августа 2010

У меня есть таблица User, определенная так:

CREATE TABLE Users(
    UserId int IDENTITY(1,1) NOT NULL,
    UserName varchar(128) NOT NULL,
    Name nvarchar(200) NOT NULL,
    Password binary(64) NOT NULL,
    PasswordSalt binary(16) NOT NULL
)

Я пытаюсь создать два класса, которые соответствуют этой таблице:

  • Первый объект с именем User не имеет свойств Password и PasswordSalt.
  • Второй объект, называемый SecurityUser, наследуется от User и определяет свойства Password и PasswordSalt.

Идея заключается в том, что SecurityUser является внутренним объектом, который требует промежуточного сервиса для изменения пароля. Это необходимо, чтобы не возвращать пароль и пароль каждый раз, когда мне нужно запросить пользователя.

Класс User - это то, что я называю безопасным объектом, который не предоставляет никакой конфиденциальной информации.

Прямо сейчас я определил две карты:

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

и

public class SecurityUserMap : SubclassMap<SecurityUser>
{
    protected SecurityUserMap()
    {
        Map(x => x.Password);
        Map(x => x.PasswordSalt);
        Table("Users");
    }
}

Проблема в том, что nHibernate создает таблицу с именем SecurityUser. Я попытался использовать функцию Table("Users"), чтобы указать ту же таблицу, но затем я получил неверное отображение nhibernate.

Как мне достичь того, что я пытаюсь сделать? Или есть альтернативный подход?

1 Ответ

1 голос
/ 10 августа 2010

NHibernate не знает, когда сохранять пользователя, а когда сохранять защищенного пользователя.Вам нужно что-то в вашей базе данных, чтобы сообщить NHibernate, когда запись является пользователем, а когда это пользователь безопасности.Чтобы рассказать, как это сделать, мне нужно знать, почему «Это необходимо, чтобы не возвращать пароль и пароль каждый раз, когда мне нужно запросить пользователя».Когда причина в производительности, вы, вероятно, не можете измерить разницу.Если вы используете класс User для создания сценариев отчетности, вы можете лучше использовать класс проекции для выбора результата запросов отчетов, чем сопоставленный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...