Как отобразить конкретную строку с NHibernate - PullRequest
0 голосов
/ 21 ноября 2018

У меня следующая ситуация:

// Model Attribute
int Id;
string Name;
int Classification;

и

// Model Role
int Id;
string Name;
List<Attribute> Attributes;

База данных выглядит так:

tbl_Role
Id     Name
1      Admin
2      User

и

tbl_Attribute
Id     Name     Classification
1      Prename  1
2      Surname  2

и

tbl_Role_Attribute
RoleId ClassificationId
1      1
1      2
2      1

Как создать сопоставление по коду в NHibernate, чтобы получить все разрешенные атрибуты для роли в зависимости от подключенной классификации и разрешить атрибуты для JSON?Как будет выглядеть отображение модели в атрибут tbl_Role_Attribute?Примерно так:

public PolicyMapping()
    {
        Table("tbl_Role_Attribute");

        ManyToOne(a => a.Role, b =>
        {
            b.Column($"RoleId");
        });

        ManyToOne(a => a.Attribute, b =>
        {
            b.Column($"ClassificationId");
        });
    }

Ожидаемый вывод JSON от псевдо getRole ()

[{Id: 1,
Name: Admin,
allowedAttributes: {
     Id: 1
     Name: Prename
     Classification: 1},
     {Id: 2
     Name: Surname
     Classification: 2}}]

Если вам нужна дополнительная информация, дайте мне знать.Заранее спасибо.

РЕДАКТИРОВАТЬ:

Моя цель на самом деле состоит в том, чтобы сопоставить роль с конкретными классификациями (не с каждым отдельным атрибутом) и получить все атрибуты, которые находятся в этой классификации,(Представьте себе классификацию, похожую на какую-то «группу»).

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны отобразить Role и Attribute, а затем иметь many-to-many на Role.Что-то вроде (при условии FluentNhibernate):

public class AttributeMap : ClassMap<Attribute>
{
    public AttributeMap()
    {
        Id(a => a.Id);
        Map(a => a.Name);
        Map(a => a.Classification);
    }
}

public class RoleMap : ClassMap<Role>
{
    public RoleMap()
    {
        Id(r => r.Id);
        Map(r => r.Name);
        HasManyToMany(r => r.Attributes)
    }
}

Тогда вы можете создать свой результат JSON следующим образом:

var results = 
    session
        .Query<Role>()
        .Fetch(r => r.Attributes)
        .ToList();

var json = 
    JsonConvert.SerializeObject(
       results
           .Select(r => 
               new 
               {
                   r.Id,
                   r.Name,
                   allowedAttributes = r.Attributes
               });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...