it-swarm-ru.tech

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

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

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

54
Jeff

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

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

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

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

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

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

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

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

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

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

134
DaveD

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

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

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

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

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

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

13
jamescnectnet

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

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

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

6
alex

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

1
kram

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

1
Jeff

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

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

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

0
Terkhos

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

0
Rob Sedgwick

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

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

0
Vishal