Импорт функции структуры сущностей, не может загрузить отношения для функций, которые возвращают типы сущностей - PullRequest
6 голосов
/ 16 декабря 2008

Я создал функцию импорта, которая возвращает результаты сохраненной процедуры как одну из моих сущностей. однако я не могу пройти через свойства навигации, чтобы получить доступ к данным в других объектах. Я знаю, что вы можете использовать include () для objectQueries, но не могу найти ничего, что заставит EF загрузить мои отношения для результатов сущностей импорта функций.

Есть идеи ??

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

1 Ответ

5 голосов
/ 03 октября 2009

Это невозможно в EF 1.0

Причина в том, что EF будет рассматривать значения хранимых процедур как значения, а не свойства навигации.

Например, сущность Employee имеет несколько сущностей Order. В заказе у вас есть свойство под названием EmployeeID. Когда база данных заполняет ваш запрос с помощью операторов включения, она создает 1 запрос проекции в SQL для заполнения всех данных заказа, которые может иметь конкретный сотрудник.

Так что, если бы я сказал

var employee = context.Employees.Include ("Orders"). Где (e => e.ID == 1) .First ();

var orders = employee.Orders;

SQL для первого запроса создаст проекционный запрос, который будет содержать заказы, где EmployeeID = 1.

Теперь, когда ваша хранимая процедура выполняется, она может выполнять любой код за сценой (другими словами, она может возвращать любой набор данных). Поэтому, когда SQL запускает хранимую процедуру, он просто запускает код в этой хранимой процедуре и не знает, что EmployeeID on Order является FK для этого свойства. Кроме того, если ваша хранимая процедура возвращает сущность Employee, то вы смотрите на другой сценарий, в котором у вас даже не будет идентификатора OrderID для выполнения.

Чтобы обойти это, вы можете настроить запрос в EF, используя операторы Include, которые могут отражать любую хранимую процедуру. Если вы используете правильное сочетание операторов .Select и .Include, вы сможете сделать то же самое.

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