如何使用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