当将Xamarin表单与EF Core和SQLite组合时,没有问题的小延迟,但当使用加密时,延迟太多
AppContext
public AppContext(string dbPath)
{
if (!string.IsNullOrEmpty(dbPath))
_dbPath = dbPath;
SQLitePCL.Batteries_V2.Init();
this.Database.EnsureCreated();
}
OnConfiguring
:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
//optionsBuilder
// .UseSqlite($"Filename={dbPath}");
connection = InitializeSQLiteConnection(_dbPath);
optionsBuilder.UseSqlite(connection);
}
private static SqliteConnection InitializeSQLiteConnection(string databaseFile)
{
var connectionString = new SqliteConnectionStringBuilder
{
Mode = SqliteOpenMode.ReadWriteCreate,
DataSource = databaseFile,
Password = "Test123"
};
return new SqliteConnection(connectionString.ToString());
}
使用过的包装
- Microsoft.EntityFrameworkCore.Sqlite.Core
- Microsoft.Data.Sqlite.Core
- SQLitePCLRaw.bundle_e_sqlcipher
对于依赖项注入,我使用AutoFac
var dbPath = Path.Combine(FileSystem.AppDataDirectory, "Store.db3");
builder.RegisterType<DataBase.Services.AppContext>().As<IDatabaseContext>().WithParameter("dbPath", "dbPath").InstancePerLifetimeScope();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();
由于密钥派生的原因,首次使用SQLCipher连接的速度故意较慢。