Ошибка вызова хранимых процедур из EntityFramework
Я пытаюсь получить доступ к процедуре Store из EntityFramework.
Я выполнил следующие шаги:
Прежде всего, я создал Хранимую процедуру в базе данных Azure:
![enter image description here]()
Затем я обновил модель .edmx из базы данных, выбрав только сохраненную процедуру, которую хочу.
![enter image description here]()
Сделав это, в функции Import я вижу, что StoredProcedure добавлен, но не в разделе StoredProcedures.
Что я могу сделать, чтобы он появился здесь?
![enter image description here]()
В разделе "Импорт функций" все параметры задаются как "Enter", тогда как "MaxReference" следует пометить как "Выход".
Как я могу его изменить?
![enter image description here]()
Хотя эти две проблемы я выполнил код:
![enter image description here]()
и я получил следующее исключение:
EntityCommandCompilationException
An error occurred while preparing command definition. See the inner exception for details.
и InnerException:
The function import 'DataModelEntities.AssignMaxSalesRef' cannot be executed because it is not assigned to a storage function.
![enter image description here]()
Ответы
Ответ 1
Вы можете обратиться к этому сообщению в блоге: ФункцияImport не сопоставляется с функцией магазина Ошибка, в которой рассматривается аналогичная проблема. Причина, по-видимому, следующая:
Мне пришлось внести изменения в хранимую процедуру, и она была удалена из файла XML-модели Entity Data (*.edmx)
Со следующим пошаговым решением:
Существует простое решение для исправления этой ошибки. Сначала откройте файл edmx и щелкните правой кнопкой мыши на модели, которой принадлежит хранимая процедура. Нажмите "Добавить", затем выберите "Добавить функцию импорта".
Добавьте то же имя импорта функции, которое используется в вашем файле контекста (если я, как и я, метод уже был создан, но перепутался, в противном случае все будет новым, и оно будет восстановлено в любом случае). Выберите имя хранимой процедуры, которое вы пытаетесь исправить. Выберите объекты и нажмите "ОК". Появится новое окно "Убедитесь, что имя FunctionImport уникально".
Если это так, и вы получаете всплывающее окно "Проверяете, что имя функции уникально", выполните следующие действия. Откройте файл *.edmx и щелкните правой кнопкой мыши по модели, которую вы хотите обновить. Выберите "Показать в браузере моделей". Теперь открывается окно браузера моделей. Перейти к: {myProject}.DataModel > EntityContainer: {somethingEntities} > Импорт функций. Импорт функций, вызывающий проблему, должен быть там, просто удалите его и сохраните *.edmx файл.
Попробуйте снова добавить функцию Import. Вуаля! на этот раз никаких проблем. Сохраните файл *.edmx и заново создайте файл контекста (сделав простое неинвазивное изменение, например, добавив пробел в файл {myProject}.Context.tt). убедитесь, что новый метод:
public virtual ObjectResult<MyEntity> <MyEntity>_NameoftheSP(parametets)
присутствует в вашем файле контекста.
Другой ресурс устранения неполадок с похожими пошаговыми инструкциями (и изображениями!) при обновлении файла edmx: Импорт функции не может быть выполнен, потому что это не сопоставлено с функцией магазина.
Ответ 2
Этот пост должен быть комментарием, но у меня недостаточно комментариев для комментариев.
У меня была аналогичная проблема. Мои хранимые процедуры были видны, и все же я все еще получал ошибку. Этот вопрос и ответ от Alex заставили меня посмотреть в разделе "Импорт объектов" в "Браузер моделей", и я увидел, что у меня было несколько записей для каждой хранимой процедуры. У них были порядковые номера, чтобы они не были истинными дубликатами. Я удалил все в разделе "Импорт объектов" и все в разделе "Хранимые процедуры/функции", а затем повторно добавил их, обновив модель из базы данных. Теперь моя проблема решена.
Ответ 3
У меня была эта ошибка:
The function import *XXX* cannot be executed because it is not mapped to a store function.
когда я проверяю, моя хранимая процедура была удалена из базы данных. Я создал его снова, и он исправил ошибку.
Ответ 4
Когда вы открываете edmx explorer (режим Diagrma), вы увидите окно браузера модели на стороне диаграммы.
В разделе "Импорт функций" попробуйте найти туру "Сохраненная функция", щелкните правой кнопкой мыши по ней, затем вы можете ее изменить.
Откроется окно, затем выберите сохраненную функцию. функция будет отображаться после этого
voila, это работает для меня.