Добавление нового столбца в существующую таблицу в инфраструктуре Entity

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

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

Первая попытка:

  • Открыл модель в Visual Studio
  • Щелкните правой кнопкой мыши по фону
  • Нажмите "Обновить модель из базы данных..."
  • Нажмите на вкладку "Обновить"
  • Выбранные таблицы
  • Выделил конкретную таблицу
  • Нажмите Готово

Результат:

  • Классы для десятков таблиц, которые были в моей модели, были удалены.
  • Соответствующая таблица не обновлялась

Вторая попытка

  • Восстановленный источник
  • То же, что и выше, но
  • После открытия мастера обновления щелкните по вкладке "Удалить"
  • Выбранные таблицы
  • Нажмите Готово
  • Все таблицы были удалены.
  • Сохранена модель EF/закрыта/открыта.
  • Вернулся к вкладке "Добавление мастера обновлений"
  • Щелкните таблицы
  • Ни одна из моих таблиц не отображалась, когда я расширил все
  • Установлен флажок на уровне таблиц

Результат

  • Ни один из моих таблиц не был добавлен назад, но все, что не было изначально было добавлено.

Третья попытка

  • Восстановлен весь источник
  • Удалены два файла .tt
  • Открыл мастер обновления
  • Нажмите "Добавить для всего"

Результат

  • Ничего не было воссоздано, нет .tt файлов или чего-то еще.

Четвертая попытка

  • Восстановленный источник
  • Удаленная таблица из модели EF.
  • Мастер открываемых обновлений
  • Нажмите "Добавить таблицы"

Результаты

  • Классы для десятков таблиц, которые были в моей модели, были удалены.
  • Следующая таблица не была добавлена.

Конечная попытка

  • Добавлен объект вручную для моделирования

Результат

  • Код компилируется и выполняется, но значения никогда не извлекаются из базы данных или обновлены

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

Ответ 1

"Обновить модель из базы данных" трудно/медленно использовать и подвержено ошибкам. Он генерирует другие вещи, которые вам, вероятно, не нужны/нужны. Поэтому ручное добавление столбца, которое вам нужно, будет работать лучше. Я предлагаю вам сделать это вне редактора VS, поскольку в зависимости от того, сколько моделей/таблиц он может очень медленно открывать файл в VS.

 1. So in Windows Exlorer,right click on the *.edmx file and open with Notepad (or Notepad++/Textpad).

 2. Search for the text <EntityType Name="YourTableNameToAddColumn">.

 3. Add the property <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />

 4. Search for the text <MappingFragment StoreEntitySet="YourTableNameToAddColumn">

 5. Add mapping to the new column <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>

 6. Save the *.edmx file

Ответ 2

В дополнение к ответу alltej выше и отвечая Крису Уолшу, он отвечает, что он получает "Концептуальный участник или свойство" xxxxx ", указанный как часть этого MSL, не существует в MetadataWorkspace". в новой строке свойств Scalar под <

Вы должны убедиться, что вы ищете "Добавить свойство" в TWO​​strong > местах в вашем .edmx файле, иначе вы получите ошибку Chris

Ответ 3

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

Спасибо

Ответ 4

1. В Windows Exlorer щелкните правой кнопкой мыши файл *.edmx и откройте его с помощью Блокнота (или Notepad++/Textpad).

2. Найдите текст <EntityType Name="YourTableNameToAddColumn">.

<Property Name="YourNewColumnName" Type="varchar" MaxLength="64"/> свойство <Property Name="YourNewColumnName" Type="varchar" MaxLength="64"/>.

<EntityType Name="YourTableNameToAddColumn"> текст снова <EntityType Name="YourTableNameToAddColumn">, есть второй.

5. Добавьте к нему свойство <Property Name="YourNewColumnName" Type="varchar" MaxLength="64"/>.

6. Поиск текста <MappingFragment StoreEntitySet="YourTableNameToAddColumn">.

<ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/> отображение в новый столбец <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>.

8. Сохраните файл *.edmx

9.После этого обновите модель edmx вашей public string YourNewColumnName { get; set; } таблицы public string YourNewColumnName { get; set; } public string YourNewColumnName { get; set; }

Ответ 5

ПРЕДУПРЕЖДЕНИЕ: Если вы не можете удалить свою базу данных, НЕ выполняйте следующие шаги!

Я использую Visual Code (.net 2). Вот как я это решил:

Сначала удалите свою базу данных:

dotnet ef database drop

Затем удалите все миграции:

dotnet ef migrations remove

Запустите ту же команду, пока не удаляются миграции all!

Добавьте первую миграцию:

dotnet ef migrations add InitialCreate

После выполнения команды, указанной выше, обязательно внесите изменения в новый файл, сгенерированный, возможно, в файл Data/Migrations: timestamp + InitialCreate не файл desing.

Пример изображения: Добавление нового столбца

После добавления ваших совпадений, и все будет согласовано, сохраните проект и выполните следующую команду:

dotnet ef database update

Если все в порядке, ваш новый столбец будет создан.

Ответ 6

Я только что нашел этот вопрос, когда возникла ситуация, когда я добавил несколько столбцов в таблицу, и мой файл edmx обновился бы очень хорошо; однако генерация кода не запускалась должным образом, поэтому мои файлы .cs не обновлялись. Я щелкнул правой кнопкой мыши по файлу Entities.tt и выбрал "Запустить пользовательский инструмент", который запускает преобразования текста, что исправило его для меня.