Обновление хранимой процедуры в Entity Framework 3.5 - PullRequest
54 голосов
/ 14 февраля 2011

Я использую .NET 3.5 SP1, VS 2008 со структурой объекта.Первоначально я добавил хранимую процедуру в мою модель, которая приняла 2 параметра.Позже я изменил sproc, чтобы принять только 1 параметр.Я запустил пункт меню Update Model From Database и подтвердил, что мой sproc был указан на вкладке Refresh.Закончил работу мастера, очистил и перестроил решение, и модель так и не изменила подпись спрока.

Почему он не обновляется?Не работает ли функция обновления модели из базы данных?Я что-то пропустил?Спасибо.

Ответы [ 8 ]

134 голосов
/ 08 апреля 2012

Я видел две проблемы с обновлением хранимой процедуры после добавления ее в платформу сущностей:

  • Функция импорта, созданная для вызова SPROC, не была обновлена ​​(неверно, из-запараметры даты)
  • Сложный тип, созданный для результирующего набора SPROC, не был обновлен (неправильные, устаревшие поля)

Обновление модели EDMX (импорт функции)

  1. Откройте файл .edmx (в конструкторе графического интерфейса).
  2. Щелкните правой кнопкой мыши в открытом пространстве и выберите «Обновить модель из базы данных».
  3. Нажмите Готово (когда сможете) во всплывающем окне.Ваша подпись SPROC должна быть обновлена ​​(вместе с импортом всех функций).

Обновление типа хранимой процедуры

  1. , откройте " Model Browser"окно, пока у вас открыт .edmx.

  2. Разверните ContentModel , EntityContainer: ... , а затем Функция Импортирует узлы.Найдите функцию импорта для вашей хранимой процедуры и дважды щелкните .Откроется то же окно, которое вы использовали для его создания, но теперь оно заполнено данными.

  3. Нажмите кнопку Получить информацию о столбце (посмотрите на сетку под кнопкойчтобы увидеть, что будет изменено).

  4. Нажмите кнопку Обновить рядом с переключателем «Сложный».

  5. Нажмите OK , и комплексный тип для вашего набора результатов должен быть обновлен.

13 голосов
/ 10 сентября 2015

Вам не нужно редактировать edmx / xml. ДЕЛАЙТЕ ЭТО:

Когда вы переносите хранимую процедуру в EDMX (я говорю о той, которая возвращает набор результатов, но это будет аналогичный процесс), 3, а не 1, элементы создаются, и это является источником эта проблема. (*** Второй источник проблемы заключается в том, что вам необходимо явно СОХРАНИТЬ после удаления объектов, прежде чем повторно импортировать объекты, в противном случае вновь повторно импортированные объекты будут конфликтовать с тем, что не было действительно удалено (путем сохранения) из edmx.

SO! Сделайте это:

В Обозревателе моделей, обычно слева, вставьте название вашей хранимой процедуры в поле поиска, нажмите ввод (или поиск). Он приземлится в первую очередь - возможно, сама хранимая процедура. Щелкните правой кнопкой мыши и удалите. Теперь поместите курсор обратно в поле поиска -> нажмите Enter или выполните поиск снова. Теперь вы попадете на функцию импорта. Щелкните правой кнопкой мыши и удалите. Сделайте то же самое в третий раз - это попадет на сложный тип, представляющий набор результатов. Удали это. Теперь вы сделали НЕ !!!!! Вы должны сохранить то, что вы только что сделали, чтобы удаления записывались (не записывались) в edmx.

Теперь, снова получите хранимую процедуру (обновленная модель / выберите сохраненный процесс). СЕЙЧАС НАЖМИТЕ СОХРАНИТЬ.

Это будет работать каждый раз. Ключ должен быть уверен при использовании браузера модели для поиска ВСЕХ экземпляров имени хранимой процедуры, появляющихся в браузере модели, и поэтому лучше не суетиться с соглашениями об именах по умолчанию. Второй ключ - это СОХРАНИТЬ после выполнения любого шага.

6 голосов
/ 08 января 2015

Если вам нужно изменить типы данных столбцов в наборе результатов -> в начале stor proc add выключено

Тогда используйте Браузер моделей -> Импорт функций -> Редактировать процесс -> Кнопка «Получить информацию о столбцах» -> Кнопка «Обновить»

Вот как Нейл делает это:)

1 голос
/ 26 мая 2011

если вы измените подпись хранимого процесса, вам потребуется обновить любой сложный тип, созданный в модели, с помощью функции импорта.

1 голос
/ 14 февраля 2011

Потребовалось много ручного редактирования XML и нескольких перезапусков Visual Studio, но я наконец смог заставить VS забыть предыдущую подпись.Затем я просто использовал обычный мастер EF, чтобы добавить его обратно, и он работал просто отлично.

0 голосов
/ 28 апреля 2015

Вы также можете стереть все свидетельства SP в следующих местах, эти файлы можно найти в браузере моделей при открытии файла .edmx:

  • YourModel> Сложные типы;
  • YourModel> Импорт функций;
  • YourModel.Store> Хранимые процедуры / функции.

После удаления вы можете без проблем добавить его обратно.

0 голосов
/ 13 августа 2014

Была похожая проблема в EF4, где нет возможности обновить отдельные sps, она предназначена для этого, когда вы нажимаете кнопку Обновить в мастере обновления, но она не работает надежноМне пришлось в браузере модели удалить сложные типы возвращаемых значений, а также функцию импорта.Затем перейдите в файл edmx с помощью редактора XML и удалите ссылку на сохраненный процесс (не удалось найти способ сделать это в браузере модели).Затем заново добавьте sps.

0 голосов
/ 14 февраля 2011

Вы должны удалить и добавить хранимые процедуры обратно, поскольку структура сущностей должна сгенерировать новое определение для вашей процедуры.Я думаю, вам нужно повторить функцию импорта.

В основном, если вы изменили логику процедуры, а не тип возвращаемого значения или сигнатуру, вам не нужно добавлять его снова.Это будет работать нормально, но если вы измените тип возвращаемого значения или сигнатуру, ef необходимо будет сгенерировать и сопоставить с новым определением, которое так и будет работать.

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