SQLite를 사용하여 ASP.NET 코어 웹 응용 프로그램의 릴리스 빌드에서 ApplicationDbContext에 대한 기존 마이그레이션을 적용하는 방법

asp.net-core dotnet-cli ef-migrations entity-framework-core sqlite

문제

SQLite 데이터베이스를 사용하여 ASP.NET Core 웹 응용 프로그램의 릴리스 빌드에서 ApplicationDbContext에 대한 기존 마이그레이션을 적용 할 수 없습니다. 결과적으로, 내 sqlite .db 파일을 디버그 빌드 (마이그레이션을 적용 할 수 있음)에서 릴리스 빌드에 복사하여 우분투 서버에 배포 할 수 있도록해야합니다. 어느 쪽이든, 또는 app.UseDatabaseErrorPage(); 를 호출해야합니다 app.UseDatabaseErrorPage(); 프로덕션 환경의 Startup.cs 내부에 public void Configure() 메서드가 있으므로 권장되지 않습니다.

이 문제를 다시 만들려면 Visual Studio에서 개별 사용자 계정 인증을 사용하여 ASP.NET 핵심 웹 응용 프로그램 (.NET Core)을 만듭니다. 나는 프로젝트 Hevn을 불렀다 .

그런 다음 SQL Server 대신 SQLite를 사용하도록 project.json 을 업데이트하십시오.

// Change from this
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": {
  "version": "1.0.1",
  "type": "build"
},

// to this
"Microsoft.EntityFrameworkCore.Sqlite": "1.0.1",
"Microsoft.EntityFrameworkCore.Sqlite.Design": {
  "version": "1.0.1",
  "type": "build"
},

그런 다음 SQL Server 대신 SQLite를 사용하도록 Startup.cs 를 업데이트하십시오.

// Change from this
services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

// to this
services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));

그런 다음 appsettings.json 열고 SQLite 데이터베이스를 사용하도록 DefaultConnection을 변경하십시오. (나는 지명 Hevn.db ) :

// Change DefaultConnection to use SQLite database called Hevn.db
"ConnectionStrings": {
  "DefaultConnection": "Data Source=./Hevn.db"
},

그런 다음 명령 프롬프트를 열고 프로젝트로 이동하여 dotnet ef database update 실행하여 마이그레이션을 적용합니다.

cd "%USERPROFILE%/Documents/Visual Studio 2015/Projects/Hevn/src/Hevn"
dotnet ef database update
dotnet run

이렇게하면 bin/Debug/netcoreapp1.0 폴더가 만들어지고 그 폴더 안에 Hevn.db sqlite 데이터베이스 파일이 있습니다. sqlite 파일을 탐색 할 때 인증에 필요한 테이블이 작성되었는지 확인할 수 있습니다 (예 : AspNetUsers 테이블).

그러나 릴리스 빌드에서는이 작업을 수행 할 수 없습니다. dotnet build -c Release 를 실행하여 bin/Release/netcoreapp1.0 아래에서 내 응용 프로그램의 릴리스 버전을 빌드 할 수 있습니다. dotnet run -c Release 를 실행하여 내 앱의 출시 버전을 실행할 수도 있습니다. 릴리스 버전을 실행하면 bin/Release/netcoreapp1.0 아래에 Hevn.db sqlite 파일이 생성 Hevn.db sqlite 파일을 탐색하면 테이블이 생성되지 않은 것으로 나타납니다.

이 시점에서 내 유일한 옵션은 Hevn.db 파일을 Debug에서 Release 빌드로 복사하는 Hevn.db 입니다.

나는 또한 Hevn.db dotnet ef database update -e Production 시도했지만 Debug 빌드 아래에 Hevn.db 가 생성된다.

마이그레이션을 적용하기 전에 디버그 모드에서 ASP.NET Core 웹 응용 프로그램을 실행할 때 등록 / 로그인을 시도 할 때 다음 화면이 표시됩니다. 마이그레이션 적용을 클릭하거나 dotnet ef database update 를 실행하여 마이그레이션을 적용하고 SQLite를 사용하여 등록 / 로그인 작업을 수행 할 수 있습니다. 디버그 모드에서 마이그레이션 적용 가능

그러나 릴리스 모드에서 ASP.NET Core 웹 응용 프로그램을 실행할 때 등록 / 로그인을 시도 할 때 다음 화면이 표시됩니다. 릴리스 빌드에 마이그레이션을 적용 할 수있는 방법은 없습니다. 릴리스 모드에서 이전을 적용 할 수 없습니다.

ASP.NET Core 웹 앱 릴리스 빌드에서 마이그레이션을 적용 할 수 있습니까? 또는 데이터베이스 마이그레이션 sqlite 파일을 디버그에서 릴리스로 복사해야합니까?

인기 답변

이 명령은 내 sqlite 데이터베이스를 릴리스 폴더에 만들었습니다.

dotnet ef database update --configuration release

하지만 난 project.json 및 최신 SDK보다는 새로운 msbuild .csproj를 사용하고 있습니다. 그것이 당신에게 영향을 줄지 확실하지 않은가요?



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.