Обновление хранимой процедуры в инфраструктуре сущности 3.5
Я использую .NET 3.5 SP1, VS 2008 с инфраструктурой сущности. Я первоначально добавил хранимую процедуру к моей модели, которая взяла 2 параметра. Позже я изменил sproc, чтобы просто взять 1 параметр. Я запустил пункт меню Update Model From Database
и подтвердил, что мой sproc был указан на вкладке Refresh
. Закончил мастер, очистил и перестроил решение, и модель никогда не меняла подпись sproc.
Почему он не обновляется? Не работает ли модель обновления из базы данных? Я что-то упускаю? Спасибо.
Ответы
Ответ 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 > Хранимые процедуры/функции.
После удаления его вы можете добавить его без проблем.