Как смоделировать отношение n к m с атрибутом в платформе Entity без добавления дополнительной таблицы - PullRequest
0 голосов
/ 18 августа 2011

Я довольно плохо знаком с платформой Entity и моделирую эту простую структуру:

enter image description here

В этой модели у меня есть класс Users со свойством UsersGroups(коллекция объектов UserGroups).

Я хотел бы иметь класс Users со свойством, таким как Группы с типом Tuple или что-то вроде этого (новый класс PriorizedGroup и т. д.), которое намного больше связано с бизнесом..

Возможно ли это с платформой Entity?

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

РЕДАКТИРОВАТЬ: Если бы я моделировал бизнес-объекты, я бы создал класс User со свойством Groupsон содержит все группы, к которым принадлежит пользователь, с дополнительным свойством для сохранения его приоритета (с кортежем, с унаследованным классом, как вы пожелаете).Дело в том, что я чувствую, что объекты, созданные платформой Entity, напоминают структуру SQL, а не бизнес-структуру.

1 Ответ

1 голос
/ 18 августа 2011

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

public partial class Users
{
    public IEnumerable<PrioritizedGroup> Groups 
    { 
        get
        {
            return UserGroups.Select(ug => new PrioritizedGroup
                                                   {
                                                        Priority = ug.Priority,
                                                        Id = ug.Group.Id,
                                                        Name = ug.Group.Name,
                                                        Description = ug.Group.Description 
                                                   })
                             .OrderBy(g => g.Priority);
        }  
    }
}

Чтобы сделать это напрямую в EF, вам понадобится продвинутая техника отображения, которая потребует от вас непосредственного изменения исходного кода EDMX (либо DefiningQuery, либо QueryView), и он сделает сущностьтолько для чтения (вам понадобятся хранимые процедуры для модификации).

Чтобы сделать коллекцию доступной для обновления пользователями, вам, вероятно, потребуется использовать ObservableCollection и перенести все модификации, вызванные ObservableCollection, на исходную UserGroupsколлекция.Если у вас реализовано что-то подобное , вы можете скрыть оригинальную коллекцию .

...