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

"Обновить модель из базы данных" не видит изменения типа

У меня есть несколько столбцов, которые я изменил с Int на BigInt.

Я открыл свою модель EF и сделал "Обновить модель из базы данных" и ожидал увидеть, что эти столбцы теперь являются Int64. Но они все еще Int32s.

(Я несколько раз запускал его, чтобы убедиться.)

Я дважды проверил мою базу данных, а столбцы определенно BigInts.

Итак... не работает ли "Обновить модель из базы данных" для изменения типа данных? Нужно ли это применять вручную?

4b9b3361

Ответ 1

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

Существует, по крайней мере, один сторонний инструмент, который должен помочь с этим, но не пробовал его лично.

Ответ 2

Я использую VS2008 SP1. Если вы измените тип данных в "ModelView" (CSDL) edmx, возникнут ошибки, поскольку "DatabaseModel" (SSDL) не обновляется. Вы должны редактировать *.edmx вручную (XML). Это не так сложно, как кажется.

Вы можете просто найти свойство, которое предоставляет "Список ошибок" VS (поиск в файлах, возможно, является лучшим решением для этого). Перейдите к строке, где появится неправильный тип данных и исправьте его.

например, вы изменили float на nvarchar (50) в базе данных → перейдите к вашей модели и измените Double на String → validate → Error.... → Найдите свойство и внесите следующие изменения:

      <Property Name="YourChangedProperty" Type="float" />

в

      <Property Name="YourChangedProperty" Type="nvarchar" MaxLength="50" />

Это работает очень хорошо, если вы точно знаете, что вы изменили в базе данных. Если вы внесли бесчисленные изменения, вам придется проанализировать свои изменения с помощью какого-либо инструмента сравнения баз данных или восстановить всю модель.

Не очень хорошо. Но это "работает".

береги М

Ответ 3

Правильно - типы данных не обновляются автоматически. Вы можете просто изменить тип данных в представлении модели с помощью окна "Свойства" и изменить тип на Int64.

Ответ 4

Ответ

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

Существует несколько способов сделать это, но проще всего просто открыть модель (используя редактор по умолчанию) и изменить тип свойства от Int32 до Int64.

Объяснение (из Библиотека MSDN)

Конструктор модели данных сущностей ADO.NET(Entity Designer) использует мастер обновления для обновления файла .edmx из изменений, внесенных в базу данных. Мастер модели обновления перезаписывает модель хранилища как часть этого процесса. Мастер модели обновления также вносит некоторые изменения в концептуальную модель и сопоставления, но только делает эти изменения, когда объекты добавляются в базу данных. Например, новые типы сущностей добавляются в концептуальную модель, когда таблицы добавляются в базу данных, а новые свойства добавляются к типам сущностей, когда столбцы добавляются в таблицу. Подробнее о том, какие изменения внесены в файл .edmx, см. Изменения, внесенные в. Файл edmx с помощью мастера моделей обновлений.

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

Ответ 5

Вам нужно удалить свою EF-модель, а затем снова создать и работать.

Ответ 6

Просто снимите это очень полезное видео в случае, если кому-то это нужно. В нем объясняется общий подход к установке значений по умолчанию для полей вашей модели.

Ответ 7

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

Эта неспособность обновить существующие типы данных является намеренной, основанной на примечаниях, приложенных к документации Microsoft по теме, как сообщается в ответе Timb. (Обратите внимание, что Microsoft, похоже, либо переместила, либо удалила связанный документ, и текущая документация не относится к этой проблеме, но аналогичные формулировки можно найти в другом месте в архивированной документации. Ссылка) Мастер "Обновить модель из базы данных..." не обновляет эти изменения, а вместо этого переносит ответственность за решение проблемы на разработчика, чтобы избежать внесения неправильных автоматических изменений, которые теоретически могут повредить модель способами, которые не были предназначены разработчиком.

Таким образом, на самом деле есть только два способа решения проблемы, не прибегая к сторонним инструментам:

  • Удалите затронутые таблицы из модели и повторно добавьте их с помощью мастера "Обновить модель из базы данных...", как отмечено в ответе Э.Дж. Бреннана. Потенциальная слабость этого метода заключается в том, что он не всегда успешен, особенно если исходная модель была сгенерирована с использованием предыдущей версии Entity Framework, что иногда может заставить разработчика выполнить значительно больше работы, чем в противном случае может потребоваться для завершения. задача.

  • Вручную настройте соответствующие поля в средстве просмотра графической модели, щелкнув правой кнопкой мыши поле в таблице и выбрав "Свойства..." в контекстном меню. ПРИМЕЧАНИЕ. Не вносите ручные изменения непосредственно в файлы модели .cs из окна кода, поскольку такие изменения будут отменены при следующем запуске мастера "Обновить модель из базы данных..."; если изменения выполняются из средства просмотра графической модели, они сохранятся и после повторного запуска мастера.

Ответ 8

Также, если вы работаете с MySQL в Windows, воссоздание модели также не поможет. Схема как-то кешируется в MySQL. Поэтому, если модель не обновляется даже после восстановления, попробуйте перезапустить службу MySQL и VS, чтобы быть уверенным. После этого модель должна быть успешно обновлена.

Ответ 9

Я решил это, изменив файл .EDMX с помощью текстового редактора. Найдите свое значение и измените его тип. Затем исправьте тип в других ошибках, которые будут отображаться в отладчике.