【发布时间】:2016-07-14 06:15:55
【问题描述】:
使用从Karl Erickson窃取的Preserve access to a StorageFolder的代码
public static async Task<StorageFolder> GetOrPickAndRememberFolderAsync(string key)
{
if (StorageApplicationPermissions.FutureAccessList.ContainsItem(key))
{
return await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(key);
}
var picker = new FolderPicker();
picker.FileTypeFilter.Add("*");
StorageFolder folder = await picker.PickSingleFolderAsync();
if (folder != null)
{
StorageApplicationPermissions.FutureAccessList.AddOrReplace(key, folder);
}
return folder;
}
我们的 UWP 应用能够浏览并记住用户选择的 SQLite 数据库的位置。这应该授予对该文件夹的读/写权限。
dbContext 是这样实例化的
public dbContext(string dbPath)
{
databasePath = dbPath;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=" + databasePath);
}
如果用户为应用选择默认的本地存储位置,则此代码有效。
var picker = new FolderPicker();
picker.FileTypeFilter.Add("*");
StorageFolder folder = await picker.PickSingleFolderAsync();
StorageFolder dbFolder = await GetOrPickAndRememberFolderAsync("LocalDbFolder");
string dbPath = Path.Combine(dbFolder.Path, "MySQLite.db");
using (var db = new dbContext(dbPath))
{
db.Database.Migrate();
}
但是,如果用户选择任何其他位置(例如他们的 Documents 文件夹),应用程序将失败并显示错误 "SQLite Error 14: 'unable to open database file'."
既然用户已通过选择器明确授予应用对所选位置的权限,为什么会这样?
【问题讨论】:
标签: entity-framework sqlite uwp