Entity Framework Core: создайте миграцию, которая объединяет несколько DbContexts (с несколькими миграциями) - PullRequest
0 голосов
/ 15 мая 2019

Когда я запустил проект (сервер Identity Server 4), я создал ApplicationDBContext (который наследует от ASP.NET IdentityContext и имеет несколько пользовательских таблиц) и использовал ConfigurationDBContext, а также PersistedGrantDBContext с Identity Server 4. Я создал 3 миграции (один для каждого DBContext). Хотя данные находятся в одной базе данных (поэтому в одной базе данных).

Теперь я реорганизовал свой код, дав мне новый DBContext, содержащий все 3 базы данных в одном DBContext.

Моя проблема - новая миграция.

Пока что я удалил старые DBContexts и создал миграцию, которая снова создает точно такую ​​же базу данных, когда я запускаю ее для пустой базы данных.

Но когда речь идет о миграции существующей базы данных (с существующими данными), возникает исключение, что таблица X уже существует.

Я предполагаю, что это потому, что я удалил старый код и старые миграции.

Итак, как мне создать миграцию, которая объединит 3 разных DBContexts в один новый DBContext.

Я предполагаю, что если я оставлю старый код на месте и использую старые миграции, то он попытается создать таблицы несколько раз (так как они находятся в старых разделенных миграциях и новой комбинированной миграции)?

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

1 Ответ

0 голосов
/ 15 мая 2019

По моему мнению, вы должны сохранить 3 стандартных (старых) контекста.

Потому что: это очень плохая практика - объединять 3 в 1 и удалять их контексты по умолчанию.

  1. все эти 3 контекста имеют свои API для игры со своими данными, какие API будут обеспечивать правильное обслуживание всех данных и какие API сделают Code-First реальным кодом первым, а не кодом-Однажды.
  2. Если вы объедините их в один, как вы будете поддерживать базу данных и API в актуальном состоянии с этими проектами?и как бы вы реализовали эти API, вы хотите написать их снова?
  3. Code-First предназначен в основном для изменений базы данных, если вам нужно настроить их, просто настройте их в своем собственном контексте.затем вы можете использовать свой собственный контекст, чтобы объединить их в один, но, к сожалению, вы должны тщательно поддерживать код миграции, чтобы не допустить конфликтов друг с другом.
  4. Я предлагаю вам использовать IdentityContext в качестве основы для вашего нового контекстаи не сливайте остальные 2 сюда.который вы можете сохранить 3 контекста.
...