Первая база EF 6: как обновить хранимые процедуры?

ef-database-first entity-framework entity-framework-6 stored-procedures visual-studio-2013

Вопрос

Мы используем Entity Framework 6.0.0 и сначала используем базу данных (например, это) для генерации кода из таблиц и хранимых процедур. Это, похоже, отлично работает, за исключением того, что изменения в хранимых процедурах не отражаются при обновлении или обновлении модели. Отправка столбца в таблицу отражается, но не добавление поля в хранимую процедуру.

Интересно, что если я перейду в Model Browser , щелкните правой кнопкой мыши хранимую процедуру, выберите « Add Function Import и нажмите кнопку « Get Column Information о столбцах», чтобы увидеть правильные столбцы. Это означает, что модель знает о столбцах, но не обновляет сгенерированный код.

Существует одно обходное решение, которое заключается в удалении сгенерированной хранимой процедуры перед обновлением модели. Это работает до тех пор, пока вы не внесли никаких изменений в хранимую процедуру. Кто-нибудь знает, как избежать этого обходного пути?

Я использую Visual Studio 2013 со всеми последними обновлениями по состоянию на начало декабря 2013 года.

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

Обновление 1: ответ andersr помог в одном случае, когда хранимая процедура использовала временную таблицу, поэтому я дал ему +1, но он по-прежнему не решает основной проблемы обновления простых хранимых процедур.

Обновление 2: комментарий пользователя shimron по ссылкам на вопрос о тех же проблемах в EF 3.5. Кажется, что все же верно для EF 6.0. Прочтите его для альтернативного способа сделать это, но мой вывод на данный момент заключается в том, что самый простой способ сделать это - удалить сгенерированную хранимую процедуру перед обновлением модели. Используйте частичные классы, если хотите сделать что-то фантастическое.

Принятый ответ

Основываясь на этом ответе от DaveD , эти шаги касаются проблемы:

  1. В вашем .edmx , rt-click и выберите Model Browser .
  2. В браузере моделей (в конфигурации по умолчанию VS 2015, это вкладка в обозревателе решений), разверните функцию Imports под моделью.
  3. Дважды щелкните хранимую процедуру.
  4. Нажмите кнопку « Обновить» рядом с « Возвращает коллекцию - комплекс» (если не возвращает скаляр или объект)
  5. Нажмите « ОК», затем сохраните .edmx, чтобы отразить изменения полей в хранимой процедуре во всем вашем проекте.

Популярные ответы

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

Однако хранимая процедура будет, как вы заметили, быть доступной в браузере моделей. Я быстро проверил сценарий, описанный выше. Хранимая процедура была сгенерирована в моем контексте, но возвращаемый тип был скорее int, чем сложным . См. Ссылку выше для возможных обходных решений.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему