Убедитесь в правильном наименовании проектов
- Infrastructure
- DbConsole
- Entities
В моём случае всё выглядит вот так
Для этого откройте свойства каждого проекта в решении.
И проверьте “Целевая рабочая среда”. Должно быть .NET Core 3.1
Создаются они вот так.
На этом этапе, если отличается - скопируйте папку с этим отдельным проектом куда-нибудь. Потом удалите проект в решении. Потом удалите папку с проектом из папки решения (Это важно). После этого добавьте в решение правильный проект. Скопируйте из сделанного бэкапа все файлы кода в созданный проект (кроме файла .csproj)
Проверьте, что Infrastructure и Entities в “Тип выходных данных” имеют “Библиотека классов”, а DbConsole и ASP проект – “Консольное приложение"
Для того, чтобы устанавливать зависимости для конкретного проекта, нажмите правой кнопкой мыши по нужному проекту и выберите “Управление пакетами Nuget”. Заданные зависимости вводить в строку поиска во вкладке “Обзор”. При любой ошибке в наличии или отсутствии пакетов придётся начинать сначала.
Microsoft.AspNetCore.Mvc.NewtonsoftJson (3.1.4)
Microsoft.EntityFrameworkCore (3.1.4)
Microsoft.VisualStudio.Web.CodeGeneration.Design (3.1.3)
Microsoft.EntityFrameworkCore (3.1.4)
NewtonsoftJson (12.0.3)
System.ComponentModel.Annotations (4.7.0)
EntityFramework (6.4.4)
Microsoft.EntityFrameworkCore (3.1.4)
Microsoft.EntityFrameworkCore.SqlServer (3.1.4)
Microsoft.EntityFrameworkCore.Tools (3.1.4)
Microsoft.EntityFrameworkCore (3.1.4)
Microsoft.EntityFrameworkCore.Design (3.1.4)
Зависимости -> Добавить ссылку на проект -> Нужные отметьте галочками.
- ASP Зависит от
Infrastructure
иEntities
- DbConsole Зависит от
Infrastructure
иEntities
- Infrastructure Зависит от
Entities
Эта консоль работает со всеми проектами сразу.
Install-Package EntityFramework –IncludePrerelease
Это позволит обновить EF до самой последней версии в решении.
dotnet tool install --global dotnet-ef
Это позволит установить менеджер EF для всего вашего .NET окружения и будет работать со всеми проектами. --global
виноват.
“enable-migrations” чтобы непосредственно включить миграции как таковые. На этом этапе допустимы ошибки в консоли при выполнении этой команды. Например, такие
Все ошибки, связанные с контекстом игнорируйте.
Чтобы это сделать нажмите правой кнопкой мыши по проекту DbConsole в решении и выберите Открыть папку в проводнике
В открывшейся папке сразу будет выделен нужный файл.
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
В ItemGroup
с зависимостями от проектов (они все содержат .csproj
на конце)
Эта махинация с файлом проекта конкретно укажет версию dotnet ef
для вашего проекта.
Чтобы это сделать нажмите правой кнопкой мыши по проекту DbConsole в решении и выберите Открыть папку в проводнике
Зажмите Shift и правой кнопкой мыши по свободному месту в папке.
dotnet restore
Это загрузит все необходимые модули для миграций
dotnet ef migrations add init --context Infrastructure.AppDbContext --project ../Infrastructure -o Data/Migrations -v
Здесь init
- название вашей миграции, рекомендую назвать с большой буквы.
А Infrastructure.AppDbContext
- путь к файлу AppDbContext
внутри проекта Infrastructure
.
В данном случае AppDbContext
лежит в корне проекта. У ЕА скорее всего будет Infrastructure.DataAccess.AppDbContext
-v
указывает на расширенный вывод от вызова команды.
У меня это выглядит вот так.
После выполнения должен быть результат Done
dotnet ef database update --context Infrastructure.AppDbContext --project ../Infrastructure
Здесь Infrastructure.AppDbContext
- путь к файлу AppDbContext
внутри проекта Infrastructure
.
Это непосредственно создаст БД
Unapply migration
dotnet ef database update 0
Remove migration
dotnet ef migrations remove --context Infrastructure.AppDbContext --project ../Infrastructure -v