Подтвердить что ты не робот

Обновление хранимой процедуры в инфраструктуре сущности 3.5

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

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

4b9b3361

Ответ 1

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

  • Импорт функций, созданный для вызова SPROC, не был обновлен (неверные, устаревшие параметры)
  • Сложный тип, созданный для набора результатов SPROC, не был обновлен (неправильные, устаревшие поля)

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

  • Откройте файл .edmx(в дизайнере GUI).
  • Щелкните правой кнопкой мыши в каком-то открытом пространстве и выберите "Обновить модель из базы данных".
  • Нажмите "Готово" (если возможно) во всплывающем окне. Ваша подпись SPROC должна быть обновлена ​​(вместе с любым Импорт функций).

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

  • откройте окно Model Browser ", пока вы открыли .edmx.

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

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

  • Нажмите кнопку Обновить рядом с выбором переключателя "Комплекс".

  • Нажмите ОК, а комплексный тип для вашего результирующего набора должен быть обновлен.

Ответ 2

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

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

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

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

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

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

Ответ 3

Если вам нужно изменить типы данных столбцов в наборе результатов → в начале процесса хранения, добавьте установить fmtonly off

Затем используйте Браузер модели → Импорт функций → Редактирование страницы Proc → Получить информацию о столбце → Кнопка обновления

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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