«Обновить модель из базы данных» не видит изменения типа - PullRequest
23 голосов
/ 16 сентября 2011

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

Я открыл свою модель EF и выполнил «Обновление модели из базы данных» и ожидал, что эти столбцы теперь будут Int64s.Но они по-прежнему являются Int32.

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

Я дважды проверил свою базу данных, и столбцы определенно были BigInts... «Обновление модели из базы данных» не работает для изменения типа данных?Нужно ли наносить вручную?

Ответы [ 7 ]

44 голосов
/ 16 сентября 2011

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

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

7 голосов
/ 28 сентября 2011

Я использую 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" />

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

Не очень приятно. Но это "работает".

береги себя M

4 голосов
/ 14 марта 2012

Ответ

Для конкретного сценария, который вы упомянули, вам нужно вручную изменить тип с Int32 на Int64.

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

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

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

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

4 голосов
/ 16 сентября 2011

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

2 голосов
/ 29 февраля 2012

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

0 голосов
/ 20 февраля 2019

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

0 голосов
/ 15 февраля 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...