关于c#:使用Entity Framework Core进行密码保护的SQLite

Password protected SQLite with Entity Framework Core

我试图创建一个受密码保护的SQLite数据库,以便在使用Entity Framework Core的WPF应用程序中使用它。

我发现了如何从现有的SQLite数据库(数据库优先方法)生成DbContext和实体的方法,但是我无法使其与受密码保护的数据库一起使用。

实际上,我什至不确定如何创建一个受密码保护的SQLite DB。 加密的数据库和受密码保护的数据库有什么区别?


根据本文和此问题,尚无法使用Microsoft.Data.Sqlite程序集(由EF Core使用)加密数据库。

基于此,这是我为使其与EF Core一起使用所做的工作:

  • 将System.Data.SQLite.Core包添加到项目
  • 在配置dbContext时,为optionsBuilder提供自己的DbConnection

    1
    2
    3
    4
    5
    6
    7
    8
    var conn = new SQLiteConnection(@"Data Source=yourSQLite.db;");
    conn.Open();

    var command = conn.CreateCommand();
    command.CommandText ="PRAGMA key = password;";
    command.ExecuteNonQuery();

    optionsBuilder.UseSqlite(conn);

使用System.Data.SQLite.Core程序集中的SQLiteConnection(可以管理加密数据库)而不是Microsoft.Data.Sqlite中的SQLiteConnection非常重要。

根据文章所述,您可以使用内置的SQLiteConnection,方法是将另一个Microsoft.Data.Sqlite程序集中附带的sqlite3.dll替换为另一个处理加密数据库的数据库(您可以在此存储库中找到一个免费的数据库)。 但是我没有测试。

这是怎么做的!