NHibernate & Fluent: отображение Enum Bitmasks, но хранение в виде элементов в другой таблице - PullRequest
0 голосов
/ 05 июля 2010

У меня есть класс с именем User. Пользователь может иметь одну или несколько ролей, определенных в перечислении битовой маски. У пользователя есть свойство Role, которое я могу использовать через:

user.Roles = Roles.User | Roles.Other;

В базе данных у меня есть таблица Users и таблица User_Roles. Для каждой роли, которую имеет пользователь, я хочу сохранить ее в таблице Users_Roles с идентификатором пользователя и строковым представлением роли. например, данные, сохраненные для предыдущего примера, будут:

User_Roles
---
UserID   Role
23       User
23       Other

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

1 Ответ

0 голосов
/ 05 июля 2010

NHibernate не будет отображать одно значение в таблицу, но вы можете использовать проекцию Linq-to-object для перечисления:

protected virtual ICollection<Roles> RolesCollection
{
    get
    {
        return Enum.GetValues(typeof(Roles))
                   .Cast<Roles>()
                   .Where(r => (r & Roles) == r)
                   .ToList();
    }
    set
    {
        Roles = value.Aggregate((r1, r2) => r1 | r2);
    }
}

, а затем отобразить его как набор:1005 *

Как видите, вам даже не нужно делать свойство коллекции общедоступным, так что это прозрачно для остальной части вашего приложения.

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