SQLiteを使用してASP.NETコアWebアプリケーションのリリースビルドでApplicationDbContextの既存の移行を適用する方法

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

質問

SQLiteデータベースを使用しているASP.NET Core WebアプリケーションのリリースビルドのApplicationDbContextに既存の移行を適用できません。その結果、私は自分のUbuntu Serverに展開できるので、リリースビルドにDebugビルド(私は移行を適用することができます)からsqlite .dbファイルをコピーしなければなりません。いずれか、または私はapp.UseDatabaseErrorPage();を呼び出すapp.UseDatabaseErrorPage(); Startup.cs環境用のStartup.cs内のpublic void Configure()メソッドでは推奨されていません。

問題を再現するには、個々のユーザーアカウント認証を使用してVisual StudioでASP.NETコアWebアプリケーション(.NETコア)を作成します。私はプロジェクト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ます( AspNetUsersテーブルなど)。

しかし、私はリリースビルドのためにこれを行うことができません。 bin/Release/netcoreapp1.0 dotnet build -c Releaseを実行して、 bin/Release/netcoreapp1.0下に私のアプリケーションのリリース版をビルドします。私はまた、私のアプリのリリース版を実行するには、 dotnet run -c Releaseを実行することができます。リリース版を実行すると、 bin/Release/netcoreapp1.0下にHevn.db sqliteファイルが作成されますが、sqliteファイルを参照すると、テーブルが作成されていないことが示されます。

この時点で、私の唯一のオプションは、 Hevn.dbファイルをDebugからReleaseビルドにコピーすることです。

私もHevn.db dotnet ef database update -e ProductionHevn.dbが、それでもDebugビルドの下にHevn.dbが作成Hevn.dbれます。

移行を適用する前にデバッグモードでASP.NET Core Webアプリケーションを実行すると、登録/ログインを試みるときに次の画面が表示されます。移行の適用をクリックするか、 dotnet ef database updateを実行して移行を適用し、SQLiteを使用して登録/ログイン作業を行うだけです。 デバッグモードでの移行が可能

しかし、リリースモードでASP.NET Core Webアプリケーションを実行すると、登録/ログインを試みるときに次の画面が表示されます。リリースビルドに移行を適用する方法はありません。 リリースモードで移行を適用できません

ASP.NET Core Webアプリケーションのリリースビルドで移行を適用することは可能ですか?または、データベースから移行したsqliteファイルをDebugからReleaseにコピーする必要がありますか?

人気のある回答

このコマンドは、リリースフォルダに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は合法ですか? はい、理由を学ぶ