如何使用SQLite在ASP.NET Core Web應用程序的發布版本中應用ApplicationDbContext的現有遷移

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

我無法使用SQLite數據庫在我的ASP.NET Core Web應用程序的Release版本上應用ApplicationDbContext的現有遷移。因此,我必須將我的sqlite .db文件從Debug構建(我能夠應用遷移)複製到Release構建,這樣我就可以將它部署到我的Ubuntu服務器上。 app.UseDatabaseErrorPage(); ,或者我必須調用app.UseDatabaseErrorPage();Startup.cs for public void Configure()環境中的public void Configure()方法中,不建議這樣做。

要重新創建此問題,請在Visual Studio中使用單個用戶帳戶身份驗證創建ASP.NET Core Web應用程序(.NET Core)。我打電話給我的項目Hevn

然後,更新project.json以使用SQLite而不是SQL Server。

// 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"
},

然後,更新Startup.cs以使用SQLite而不是SQL Server:

// 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並更改DefaultConnection以使用SQLite數據庫。 (我將我的名字命名為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下構建我的應用程序的Release版本。我也可以運行dotnet run -c Release來運行我的應用程序的Release版本。運行Release版本將在bin/Release/netcoreapp1.0下創建Hevn.db sqlite文件,但瀏覽sqlite文件顯示沒有創建表。

此時,我唯一的選擇是將Hevn.db文件從Debug複製到Release版本。

我也嘗試了dotnet ef database update -e Production ,但仍然在Debug build下創建了Hevn.db

當我在應用遷移之前在調試模式下運行我的ASP.NET核心Web應用程序時,當我嘗試註冊/登錄時,我會看到以下屏幕。我只需單擊Apply Migrations或運行dotnet ef database update即可使用SQLite應用遷移和註冊/登錄。 能夠在調試模式下應用遷移

但是當我在發布模式下運行我的ASP.NET核心Web應用程序時,當我嘗試註冊/登錄時,我會看到以下屏幕。我無法將遷移應用於Release版本。 無法在發布模式下應用遷移

是否可以在ASP.NET Core Web App的Release版本上應用遷移?或者我是否不得不求助於將數據庫遷移的sqlite文件從Debug複製到Release?

熱門答案

此命令在release文件夾中創建了我的sqlite數據庫:

dotnet ef database update --configuration release

但後來我使用新的msbuild .csproj而不是project.json和最新的SDK。不確定這可能會影響你嗎?



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow