如何使用SQLite

时间:2017-02-01 10:48:57

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

我无法使用SQLite数据库在我的ASP.NET Core Web应用程序的Release版本上应用ApplicationDbContext的现有迁移。因此,我必须将我的sqlite .db文件从Debug构建(我能够应用迁移)复制到Release构建,这样我就可以将它部署到我的Ubuntu服务器上。要么是这样,要么我必须在app.UseDatabaseErrorPage();内的public void Configure()方法中为生产环境调用Startup.cs,这是不推荐的。

要重新创建此问题,请在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 Releasebin/Release/netcoreapp1.0下构建我的应用的发布版本。我还可以运行dotnet run -c Release来运行我的应用的发布版本。运行Release版本将在Hevn.db下创建bin/Release/netcoreapp1.0 sqlite文件,但浏览sqlite文件显示没有创建表。

此时,我唯一的选择是将Hevn.db文件从Debug复制到Release版本。

我也尝试了dotnet ef database update -e Production,但仍然在Debug build下创建了Hevn.db

在应用迁移之前,我在调试模式下运行ASP.NET Core Web应用程序时,在尝试注册/登录时,会出现以下屏幕。我只需单击Apply Migrations或运行dotnet ef database update即可使用SQLite应用迁移和注册/登录。 Able to apply migration in Debug mode

但是当我在发布模式下运行我的ASP.NET核心Web应用程序时,当我尝试注册/登录时,我会看到以下屏幕。我无法将迁移应用于Release版本。 Unable to apply migration in Release mode

是否可以在ASP.NET Core Web app的Release版本上应用迁移?或者我是否必须将数据库迁移的sqlite文件从Debug复制到Release?

2 个答案:

答案 0 :(得分:0)

dotnet ef database update是正确的命令。但是,默认情况下它在调试配置下运行。 -e改变环境(即影响像env.IsDevelopment()这样的代码)它不会让它在Release下运行。 -c在数据库之前应该这样做。请参阅https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

另一种选择是根据环境使用不同的连接字符串,然后您可以使用-e来控制要使用的环境。

答案 1 :(得分:0)

此命令在release文件夹中创建了我的sqlite数据库:

dotnet ef database update --configuration release

然后我使用新的msbuild .csproj而不是project.json和最新的SDK。不确定这是否会影响你?