如何在使用EF的ASP.NET Core 3.1 MVC应用程序中正确地使用SQLite数据库?

9
因此,我正在尝试创建一个使用Identity的ASP.NET Core 3.1 MVC应用程序,到目前为止它运行得很好。我想添加一个SQLite db,以便使用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; }
}

非常简单易懂,然后我修改了我的 Startup.cs 中的 ConfigureServices 方法,并使用 AddIdentity

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

}

完美,现在我已经添加了认证。太好了。

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

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

我不认为这会起作用。

"ConnectionStrings": {
    "sqlConnection": "Server=C:\\Users\\user\\Desktop\\user\\Database\\Database.db;Database=Blogging;Trusted_Connection=True;\\\""
  }

或者说这就是connectionString应该看起来的样子吗?

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

我也没有找到在创建时使用密码创建database.db文件的方法,这个能改变吗?

2个回答

17

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

  • 删除Microsoft.EntityFrameworkCore.SqlServer Nuget包,因为您不使用SqlServer。

  • 添加Microsoft.EntityFrameworkCore.Sqlite Nuget包。

  • appsettings.json中的DefaultConnection更改为:

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

  • 删除Migrations文件夹。(注意:当您部署数据库并升级Table结构时,不应删除Migrations文件夹。)

  • 打开Package Manager Console并运行:add-migration MigrationName

  • 打开Package Manager Console并运行:update-database

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

  • dotnet ef migrations add MigrationName

  • dotnet ef database update

Sqlite数据库将被创建。

我也没有找到一种在创建时使用密码创建database.db文件的方法,这个能改变吗?

  1. 删除包Microsoft.Data.Sqlite

  • 添加 Microsoft.Data.Sqlite.Core

  • 添加 SQLitePCLRaw.bundle_e_sqlcipher

  • appsettings.json 中的 DefaultConnection 改为:

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

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


    5
    在 startup.cs 中,不要忘记将 UseSqlServer 更改为 UseSqlite:例如 services.AddDbContext<ApplicationDbContext>(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection"))); - tinmac

    0

    我建议将您的数据库文件放在与您正在工作的项目相同的目录中。阅读微软文档中的EF Core tutorial,他们在该示例中使用sqllite。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接