Linq to Entities - Извлечение сущности с помощью "собственной ссылки" из хранимой процедуры - PullRequest
1 голос
/ 20 августа 2009

Я не могу понять это. У меня есть таблица с именем Employee with и Id field. Таблица также содержит поле ManagerId, которое имеет внешний ключ, указывающий на поле Id сотрудника. Когда я добавляю таблицу как сущность в мою модель данных сущности, она создает новую сущность Employee с элементом коллекции EmployeeChildren и элементом EmployeeParent. Я могу найти всех сотрудников и сделать так, чтобы они были добавлены в новый экземпляр объекта «Сотрудник». У сущности сотрудника будет много дочерних элементов, у каждой дочерней сущности может быть много собственных дочерних элементов, и у каждого есть указатель на своего родителя.

Теперь мне нужно получить подмножество сотрудников, используя хранимую процедуру. Прямо сейчас, если я найду сотрудника Джона Доу, у которого над ним 2 человека, хранимая процедура вернет 3 строки.

Имя сотрудника ManagerId

1 ноль Билл

2 1 Джейн

3 2 Джон Доу

Вот мой код для поиска:

using (var entity = new TimeEntryEntities())
    {

         var employees =
                 from E in entity.EmployeeSearch(search)
                 orderby E.Name
                 select E;


         return employees.ToList<Employee>();
    }

Прямо сейчас этот код возвращает 3 отдельных объекта. Как я могу сгруппировать их в один?

Ответы [ 2 ]

0 голосов
/ 15 марта 2010

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

0 голосов
/ 20 августа 2009

Звучит так, будто вы пытаетесь сгладить иерархию, поэтому возвращается только одна запись. Может быть, Common Table Expression (CTE) в хранимой процедуре может помочь: Вот вариант аналогичного запроса :

Также еще один пример с более подробной информацией (но вы должны зарегистрироваться бесплатно):

...