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


Я использую .Net 3.5 с пакетом обновления 1, против 2008 года в рамках организации. Я изначально добавил хранимую процедуру в свою модель, которая приняла 2 параметра. Позже я изменил sproc, чтобы просто взять 1 параметр. Я побежал меню и подтвердил, что мой sproc был указан в Refresh tab. Закончил мастер, очистил и перестроил решение, и модель никогда не меняла подпись sproc.

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

8 52

8 ответов:

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

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

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

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

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

  1. открываем "Модель Браузера окно" пока есть .edmx в открытую.

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

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

  4. нажмите обновление кнопка рядом с выбором переключателя" комплекс".

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

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

когда вы вводите хранимую процедуру в EDMX (я говорю о той, которая возвращает результирующий набор, но это будет аналогичный процесс), создаются 3, а не 1, элементы, и это является источником проблемы. (***второй источник проблемы заключается в том, что вы должны явно сохранять после удаления объектов, перед повторным импортом объектов, иначе вновь импортированные объекты столкнутся с тем, что не было действительно удалено (за счет экономии) от edmx-файла.

Так! Сделайте это:

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

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

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

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

затем использовать Модель браузера --> функции --> изменить ваш прок --> показать столбец "информация" -- > обновление кнопку

вот как Нил это делает:)

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

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

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

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

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

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

  • YourModel > Сложные Типы;
  • YourModel > Функции Импорта;
  • YourModel.Хранилище > Хранимые Процедуры / Функции.

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