Использовать файл Snapshot, файл миграции или аннотации данных в своем EF Core для обновления базы данных?
==========================================================================================================

 Я пытаюсь понять различные типы путей миграции, которые мы можем выбрать при разработке приложения ASP.NET Core 1.0 с EF Core. Когда я создал первое приложение Core, я заметил, что он создал класс ApplicationDbContextModelSnapshot, который использует ModelBuilder для построения модели. 

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

 Но когда я это делаю, я замечаю, что класс ApplicationDbContextModelSnapshot также обновляется. 

 1) Означает ли это, что я не могу изменить этот класс ApplicationDbContextModelSnapshot, так как кажется, что он каждый раз восстанавливается? 

 2) Должен ли я использовать аннотации данных для создания моей модели или использовать API Fluent, который подсказывает мне, чтобы я построил свою модель в классе ApplicationDbContext? А? другой файл, который создает модель? 

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

 Но при этом я получил ошибки, похожие на: 

```
The index 'IX_Transaction_GiftCardId' is dependent on column 'GiftCardId'.
ALTER TABLE ALTER COLUMN GiftCardId failed because one or more objects access this column.

```
  Поэтому, естественно, мне было интересно, нужно ли мне модифицировать класс ApplicationDbContextModelSnapshot. 

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

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

 У вас есть два варианта 

 **Простой метод** Самый простой способ также является самым разрушительным и возможен только в среде разработчиков. 

 Удалите все миграции, удалите базу данных, создайте новые миграции и запустите «update-database». 

 **Жесткий / безопасный метод** Это самый трудоемкий метод. Я рекомендую сначала сделать это в локальной ветке интеграции, перенеся ее на удаленную интеграцию, а затем на производство. 

 Откройте файл миграции, например, 20160914173357\_MyNewMigration.cs. Удалить все индексы по порядку. Удалить / Добавить / Редактировать схемы таблиц. Добавить все индексы обратно. 

 Для любого метода, просто убедитесь, что тестировали и тестировали снова.