[EntityFramework.Core] Migration 오류 대응
2020. 3. 19. 19:41ㆍDatabase
EntityFramework.Core 마이그레이션 중에 나타나는 주요 오류에 대한 해결방안을 정리하였습니다.
오류1: Project 'Default' is not found.
VisualStudio의 Package Manage Console에서 Migration 명령 실행 시 위의 문구가 출력될 경우가 있습니다. NuGet Package Manager가 선택된 프로젝트를 찾지 못한다는 의미로써, NuGet Package Manager의 버그로 보입니다.
문제 해결방안 여러가지가 있는데, 하나 하나 실행해보시고 문제가 해결되는지 확인해보세요.
- VisualStudio를 재시작하신 후 문제가 해결되는지 확인해보세요.
- 재시작 후에도 문제가 문제가 지속될 경우 관리자 모드로 VisualStudio를 실행하고 다시 시도해 보세요.
- 문제가 지속될 경우 Unload Project와 Reload Project를 순서대로 진행하시고, VisualStudio를 재시작 후 진행해보세요.
- Package Manager Console에서 update-package -reinstall을 실행해보세요.
- 문제가 지속될 경우, 다음 경로의 Nuget 폴더를 삭제하시고 VisualStudio를 재시작한 후 진행해보세요.
- %APPDATA%\Nuget 폴더 삭제
- %APPDATA%\..\Local\Nuget 폴더 삭제 - 그래도 해결되지 않을 경우 NuGet Package Manager 확장을 재설치하면 해결된다는 사례가 있습니다.
오류2: Your target project 'Test.Web' doesn't match your migrations assembly 'Test.Data'. Either change your target project or change your migrations assembly. Change your migrations assembly by using DbContextOptionsBuilder. E.g. options.UseSqlServer(connection, b => b.MigrationsAssembly("Test.Web")). By default, the migrations assembly is the assembly containing the DbContext. Change your target project to the migrations project by using the Package Manager Console's Default project drop-down list, or by executing "dotnet ef" from the directory containing the migrations project.
이 문제는 EntityFramework DbContext를 선언하는 프로젝트와 이를 사용하는 프로젝트가 다른 경우 발생합니다. 예를들어 아래와 같이 프로젝트가 구성되어 있을 경우 문제가 발생합니다.
Solution
├Project.Data → EntityFramework DbContext를 정의하는 프로젝트
└Project.Web → EntityFramework DbContext를 사용하는 프로젝트
├Project.Data → EntityFramework DbContext를 정의하는 프로젝트
└Project.Web → EntityFramework DbContext를 사용하는 프로젝트
이 문제를 해결하려면 EntityFramework에 설정되어 있는 TargetAssembly와 MigrationAssembly 값을 일치시켜 주어야 합니다. TargetFrmawork는 현재 실행하고 있는 프로젝트의 Assembly명으로 설정되며, MigrationAssembly는 DbContext가 정의되어 있는 Assembly 이름으로 설정됩니다. 이 값을 일치시키려면 아래와 같이 Startup.cs 파일에서 MigrationsAssembly 메서드를 호출해주시면 됩니다.
services.AddDbContext<TestDb>( options => options.UseSqlServer(Configuration.GetConnectionString("TestDb"), sqlServerOptionsAction: sqlOptions => { //MigrationAssembly 이름을 실행 중인 프로젝트의 Assembly명으로 설정해주세요 sqlOptions.MigrationsAssembly("Project.Web"); }));
'Database' 카테고리의 다른 글
[EF Core] ASP.NET Core 프로젝트에서 Maria DB 사용 (0) | 2020.04.21 |
---|---|
[DB] MS SQL - XML 데이터 조회하기 (0) | 2016.05.14 |
ASP.NET 2.0 DB (0) | 2016.04.23 |
[DB] MS SQL 대용량 SQL파일 실행 (0) | 2015.08.25 |
[DB] c#으로 SQLite 연결하기 (0) | 2015.07.25 |