如何在使用 EF 的 asp.net core 3.1 MVC 应用程序中正确使用我的 SQLite 数据库?

Ril*_*rga 4 c# asp.net entity-framework asp.net-identity .net-core

所以我正在尝试创建一个使用Identity的 ASP.NET Core 3.1 MVC 应用程序,到目前为止它运行良好。我想向其中添加一个 SQLite 数据库,以便我可以使用 EF (EntityFramework) Code First 存储用户等,这就是我所做的。

我首先使用 SQLite 创建了一个数据库文件,因此我在桌面上的文件夹中有 Database.db 文件。

然后我尝试查找有关如何实现它的文档,但是文档太多了,而且它们都非常不同,所以我无法确定什么是实现它的正确方法。

我从设置我的上下文开始

public class UserContext : IdentityDbContext
{
    public DbSet<User> Users { get; set; }
}

public class User : IdentityUser
{
    public string CustomerID { get; set; }

    public string SubscriptionID { get; set; }

    public int IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

超级简单,然后我将 Startup.cs 中的 ConfigureServices 方法修改为 AddIdentity

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<UserContext>();

}
Run Code Online (Sandbox Code Playgroud)

完美,现在我添加了身份。伟大的。

这是问题所在,我希望能够创建初始迁移以在我的 database.db 文件中创建一个表,但我不知道将 connectionString 放在哪里以及如何访问它。

我在一些论坛上读到我应该将它存储在 appsettings.json 中,但是 connectionString 会是什么样子,因为它是我磁盘上的一个文件?

我不相信这会奏效

"ConnectionStrings": {
    "sqlConnection": "Server=C:\\Users\\user\\Desktop\\user\\Database\\Database.db;Database=Blogging;Trusted_Connection=True;\\\""
  }
Run Code Online (Sandbox Code Playgroud)

或者是 connectionString 应该是什么样子?

我如何正确地将 SQLite 数据库文件实施到我的项目中,以便我可以访问和创建我的第一个迁移?

我也没有找到创建带有密码的 database.db 文件的方法,这可以更改吗?

Bal*_*his 12

按照以下步骤,将创建 Sqlite 数据库。

  • 删除Microsoft.EntityFrameworkCore.SqlServerNuget 包,因为您没有使用 SqlServer

  • 添加Microsoft.EntityFrameworkCore.SqliteNuget 包

  • 将 DefaultConnection 更改appsettings.json为:

"DefaultConnection": "Data Source=UserDatabase.db"

  • 删除迁移文件夹。(注意:部署数据库并升级表结构后,不应删除 Migrations 文件夹。)

  • 打开包管理器控制台并运行: add-migration MigrationName

  • 打开包管理器控制台并运行: update-database

如果在包管理器中运行命令时遇到问题: 您可以使用 dotnet 命令在终端窗口中运行相同的命令,只需注意它会在您运行命令的任何文件夹中创建一个 Migrations 文件夹:

  • dotnet ef 迁移添加迁移名称
  • dotnet ef 数据库更新

将创建 Sqlite 数据库。

我也没有找到创建带有密码的 database.db 文件的方法,这可以更改吗?

  1. 移除包裹 Microsoft.Data.Sqlite

  2. 添加包 Microsoft.Data.Sqlite.Core

  3. 添加包 SQLitePCLRaw.bundle_e_sqlcipher

  4. 将 DefaultConnection 更改appsettings.json为:

"DefaultConnection": "Data Source=UserDatabase.db;Password=ComplexPassword"

参考SQLite 默认不支持加密数据库文件。了解更多信息。

  • 在startup.cs中,不要忘记将UseSqlServer更改为UseSqlite:例如services.AddDbContext&lt;ApplicationDbContext&gt;(options =&gt; options.UseSqlite(Configuration.GetConnectionString("DefaultConnection"))); (4认同)

lig*_*112 0

我建议首先将数据库文件放置在与您正在处理的项目相同的目录中。阅读Microsoft 文档中的EF Core教程,他们在该示例中使用 sqllite。