Таблица связей DevExpress «многие ко многим»

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

Моя проблема связана с таблицей ассоциаций, которая создается по умолчанию, когда между двумя бизнес-объектами существует отношение M-N.

Идея такова:

Предположим, у меня есть эти объекты -> UNITS и USERS

Для каждого ПОЛЬЗОВАТЕЛЯ в UNIT мне нужно сохранить STATUS, поэтому я создал новый атрибут из SQL с именем STATUS_IN_UNIT введите здесь описание изображения

Проблема возникает, когда я хочу получить программный доступ к этому свойству, что, конечно же, невозможно, так как у меня нет объекта, связанного с этой таблицей. Единственный способ - получить к нему доступ через базу данных запросов.

Чего я хочу добиться, так это показать эту таблицу как в ListView внутри UNIT DetailView, это ОБЯЗАТЕЛЬНО, поскольку ПОЛЬЗОВАТЕЛИ, подключенные к UNIT, должны быть включены и отключены. я видел эти темы

https://www.devexpress.com/Support/Center/Example/Details/E2334 https://www.devexpress.com/Support/Center/Question/Details/T500887

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

<сильный>1. Как создать класс, который ссылается на ЭТУ таблицу? 2. Как показать ЭТУ таблицу внутри UNITS DetailView и получить доступ к ее свойствам из приведенной выше таблицы?

Было бы очень признательно, если бы вы ответили на этот вопрос.

Заранее спасибо !!!


person Kejsi Struga    schedule 25.05.2017    source источник
comment
Итак, если я правильно читаю ваши данные, вы хотите отобразить список единиц и связанных пользователей в каждой единице? В этом случае мы почти всегда используем иерархическую сетку данных, но это может не сработать для вас. Что касается бизнес-объектов, я создаю два класса (для вашего случая, Unit и User), а в родительский класс я включаю List‹ChildObject› для дочерних элементов. Итак, в вашем классе Unit у вас будет: List‹User› usersInUnit. Это должно хорошо привязываться к иерархической сетке данных.   -  person mjw    schedule 25.05.2017


Ответы (1)


Я предполагаю, что вы создали пользовательский класс и создали в нем коллекцию Unit, а также пользователя коллекции внутри класса Unit. В этом случае XAF создаст автоматически созданную промежуточную таблицу с именем Users_Units, которая содержит оба первичных ключа, и вы не можете добавлять в нее какие-либо атрибуты. Если вы хотите добавить атрибут(ы) или свойство внутри промежуточного класса, вы должны явно создать класс, поэтому вот код:

public class User : BaseObject
{ //... your code here

    [Association("User-UserUnits")]
    public XPCollection<UserUnit> UserUnits
    {
        get
        {
            return GetCollection<UserUnit>("UserUnits");
        }
    }
}

public class Unit : BaseObject
{ // ... your code here

    [Association("Unit-UserUnits")]
    public XPCollection<UserUnit> UsersUnitss
    {
        get
        {
            return GetCollection<UserUnit>("UserUnits");
        }
    }
}

public class UserUnit : BaseObject
{ 
    User user;
    [Association("User-UserUnits")]
    public User User
    {
        get
        {
            return user;
        }
        set
        {
            SetPropertyValue("User", ref user, value);
        }
    }

    Unit unit;
    [Association("Unit-UserUnits")]
    public Unit Unit
    {
        get
        {
            return unit;
        }
        set
        {
            SetPropertyValue("Unit", ref unit, value);
        }
    }

    int status;
    public int Status
    {
        get
        {
            return status;
        }
        set
        {
            SetPropertyValue("Status", ref status, value);
        }
    }
}

Но, конечно, с приведенным выше кодом вы не можете напрямую связать/разъединить друг друга между пользователем и модулем. Вместо этого вы должны добавить запись подробностей вручную, так как она действует как обычное отношение сущности «основной-подробности» или «один-ко-многим».

person Achmad Mulyadi    schedule 28.05.2017