【问题标题】:How do I properly use my SQLite db in my asp.net core 3.1 MVC application using EF?如何使用 EF 在我的 asp.net core 3.1 MVC 应用程序中正确使用我的 SQLite 数据库?
【发布时间】:2020-04-04 15:08:30
【问题描述】:

所以我正在尝试创建一个使用 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; }
}

超级直接,然后我将 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文件的时候也没有找到用密码创建的方法,这个可以改吗?

【问题讨论】:

    标签: c# asp.net entity-framework .net-core asp.net-identity


    【解决方案1】:

    通过以下步骤,将创建 Sqlite 数据库。

    • 删除Microsoft.EntityFrameworkCore.SqlServer Nuget 包,因为你没有使用 SqlServer

    • 添加Microsoft.EntityFrameworkCore.Sqlite Nuget 包

    • appsettings.json 中的 DefaultConnection 更改为:

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

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

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

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

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

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

    将创建 Sqlite 数据库。

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

    1. 删除包Microsoft.Data.Sqlite

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

    3. 添加包SQLitePCLRaw.bundle_e_sqlcipher

    4. appsettings.json 中的 DefaultConnection 更改为:

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

    更多信息请参考SQLite doesn't support encrypting database files by default.

    【讨论】:

    • 在 startup.cs 不要忘记将 UseSqlServer 更改为 UseSqlite :例如 services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));跨度>
    【解决方案2】:

    我建议首先将您的 db 文件放在与您正在处理的项目相同的目录中。从 microsoft docs 阅读 EF Core tutorial,他们在该示例中使用 sqllite。

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 2020-10-04
      • 2021-08-04
      • 2020-09-07
      • 1970-01-01
      • 2012-01-10
      • 2012-04-16
      • 2021-07-25
      相关资源
      最近更新 更多