在Xamarin表单中为Sqlite文件添加密码

Ahm*_*mel 9 c# sqlite xamarin.forms entity-framework-core

我有一个Xamarin表单应用程序,它创建一个Sqlite数据库.

Microsoft.EntityFrameworkCore.Sqlite用于创建数据库.我想为文件添加密码.我搜索了互联网,但不幸的是我找不到任何明显的方法.在StackOverflow上,有一些问题与我的问题类似,但是,该平台不是Xamarin Forms.

以下是问题:

这是我创建数据库的代码:

public class DoctorDatabaseContext : DbContext
{
        private readonly string DatabasePath;

        public virtual DbSet<OperationsNames> OperationsNames { get; set; }
        public virtual DbSet<CommonChiefComplaint> CommonChiefComplaint { get; set; }
        public virtual DbSet<CommonDiagnosis> CommonDiagnosis { get; set; }
        public virtual DbSet<CommonLabTests> CommonLabTests { get; set; }

        public DoctorDatabaseContext(string DatabasePath)
        {
            FixedDatabasePath.Path = this.DatabasePath = DatabasePath;

            Database.EnsureCreated();    
        }    

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite($"Filename={DatabasePath}");    
        }
    }
Run Code Online (Sandbox Code Playgroud)

bri*_*lam 7

在 Microsoft.Data.Sqlite 中写了一篇关于加密的文章。您可以通过将打开的连接传递到 EF Core 来利用它UseSqlite

而不是Microsoft.EntityFrameworkCore.Sqlite,使用这些包:

  • Microsoft.EntityFrameworkCore.Sqlite.Core
  • SQLitePCLRaw.bundle_sqlcipher

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
    // TODO: Dispose with DbContext
    _connection = new SqliteConnection(_connectionString);
    _connection.Open();

    // TODO: Avoid SQL injection (see post)
    var command = _connection.CreateCommand();
    command.CommandText = "PRAGMA key = '" + _password + "'";
    command.ExecuteNonQuery();

    options.UseSqlite(_connection);
}
Run Code Online (Sandbox Code Playgroud)

  • @AhmedShamel 对于你的第一个问题,我很确定这是一个拼写错误。对于第二个问题,您可以使用 [SqliteConnection](https://docs.microsoft.com/en-us/dotnet/api/microsoft.data.sqlite.sqliteconnection.-ctor?view=msdata-sqlite- 2.0.0#Microsoft_Data_Sqlite_SqliteConnection__ctor_System_String_) (2认同)
  • 抱歉,这当然不是一个完整的代码清单,只是帮助您入门。上面以“_”开头的变量应该是类中的字段。 (2认同)
  • 默认情况下(`Microsoft.EntityFrameworkCore.Sqlite`)bundle_green(一个普通的 SQLite 构建)被使用。`Microsoft..Sqlite.Core` 让你可以自带包。bundle_sqlcipher 是一个名为 SQLCipher 的 SQLite 版本,它支持加密。这一切都由 [纯电池供电的魔法](https://github.com/aspnet/Microsoft.Data.Sqlite/blob/2.0.0/src/Microsoft.Data.Sqlite.Core/Utilities/BundleInitializer.cs )。 (2认同)