Используя Entity Framework, как мне указать сортировку для свойства навигации? - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть две таблицы: [Категория], [Элемент]. Они связаны таблицей соединений: [CategoryAndItem]. Он имеет два поля первичного ключа: [CategoryKey], [ItemKey]. Внешние ключи существуют надлежащим образом, и у Entity нет проблем с их извлечением и созданием правильных свойств навигации, которые связывают объекты сущности.

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

Раньше я добавлял поле [Sequence] в таблицу соединений и модифицировал хранимую процедуру для ее обработки. Но поскольку Entity заменяет мои хранимые процедуры, мне нужно выяснить, как заставить Entity обрабатывать последовательность.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

EntityCollection неупорядочены. Вы можете прочитать об этом здесь . Обходной путь, когда вам нужен упорядоченный список, - проецировать на модель презентации POCO или DTO:

var q = from c in Context.Categories
        select new CategoryPresentation
        {
            Key = c.Key,
            Items = from ci in c.CategoryAndItems
                    orderby ci.SequenceNo
                    select new ItemPresentation
                    {
                        Key = ci.Item.Key,
                        // etc.
                    },
             // etc.
        };
0 голосов
/ 21 апреля 2010

Первый вариант: использовать хранимую процедуру. Вы все еще можете использовать хранимые процедуры с Entity Framework, и EF4 делает это проще, чем оригинальная реализация EF3.

Второй вариант: обрабатывать его вручную. Вы будете знать во время вставки, какой порядок последовательности должен получить запись CategoryAndItem? Если это так, это может быть так же просто, как установить для свойства Sequence этого объекта значение 1 + (From item as CategoryAndItem in model.CategoryAndItem select item.Sequence where item.Category = ... ).Max(). (Код VB, извините:)).

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