IdentityDbContext как настроить миграции

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

Немного предыстории ... Я унаследовал веб-приложение, использующее Entity Framework (с которым я не очень хорошо знаком). Я не был уверен, какие библиотеки отсутствуют в файле packages.config. В конце концов я отсортировал это и обнаружил, что он использует Entity Framework. В настоящее время я настроил его на использование 6.2.0, и приложение, похоже, работает нормально.

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

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

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

PM> Enable-Migrations
No context type was found in the assembly 'WebApp'.

PM> Enable-Migrations -ProjectName DataLayer
No context type was found in the assembly 'DataLayer'.

Итак, это привело меня к сомнению, будет ли IdentityDbContext вообще работать. Итак, затем я попытался изменить свой контекст, чтобы он унаследовал от DbContext, что также означало необходимость добавления свойств DbSet для пользователей и ролей, чтобы мой код мог компилироваться (хотя я никогда не проверял, работает ли приложение по-прежнему). Вот что я пробовал:

PM> Enable-Migrations -ProjectName DataLayer
Migrations have already been enabled in project 'DataLayer'. To overwrite 
the existing migrations configuration, use the -Force parameter.

PM> Add-Migration InitialCreate –IgnoreChanges -ProjectName DataLayer
No migrations configuration type was found in the assembly 'DataLayer'. (In 
Visual Studio you can use the Enable-Migrations command from Package Manager 
Console to add a migrations configuration).

Я правильно читаю? Он может найти конфигурацию миграции, но не может? Кто-нибудь тестирует эти инструменты?

Хорошо, тогда я решаю воспользоваться рекомендацией по использованию -Force:

PM> Enable-Migrations -ProjectName DataLayer -Force
Code First Migrations enabled for project DataLayer.

PM> Add-Migration InitialCreate –IgnoreChanges -ProjectName DataLayer
The project 'WebApp' failed to build.

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

PM> Add-Migration InitialCreate –IgnoreChanges -ProjectName DataLayer
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system 
cannot find the file specified.
File name: 'Microsoft.AspNet.Identity.Core, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35'

Итак, у меня уже был Microsoft.AspNet.Identity.Core 2.2.1, установленный на DataLayer через NuGet, но, очевидно, он не был добавлен в качестве ссылки в проект DataLayer. Добавил и попробуем еще раз:

PM> Add-Migration InitialCreate –IgnoreChanges -ProjectName DataLayer
System.Data.Entity.ModelConfiguration.ModelValidationException: One or more 
validation errors were detected during model generation:

DataLayer.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key 
defined. Define the key for this EntityType.
DataLayer.IdentityUserRole: : EntityType 'IdentityUserRole' has no key 
defined. Define the key for this EntityType.
IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on 
type 'IdentityUserLogin' that has no keys defined.
IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on 
type 'IdentityUserRole' that has no keys defined.

Я предполагаю, что эти ошибки связаны с тем, что я переключил IdentityDbContext на DbContext.

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

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

Стоит ли мне просто попробовать отказаться от миграций? Или, может быть, Entity Framework полностью?

Редактировать:

Я нашел В сборке EF6 не найден тип контекста, который объясняет, почему IdentityDbContext не работает. По-видимому, Microsoft.AspNet.Identity.Core не добавляется в качестве ссылки, что казалось странным, потому что я ожидал, что ссылка будет добавлена ​​с помощью NuGet. Но это решает только проблему Enable-Migrations. По-прежнему имеет ошибку конфигурации миграции при добавлении-миграции.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, думаю, я все исправил. Таким образом, помимо инструмента Enable-Migrations, который явно проглатывает отсутствующие ссылки вместо того, чтобы сообщать вам о них, инструменту Add-Migration, очевидно, требуется -ConfigurationTypeName, чтобы найти конфигурацию. Не совсем уверен, почему, поскольку Enable-Migrations смогла найти конфигурацию без этого. Но пока это работает, это все, что меня волнует.

Другие вопросы по теме