【问题标题】:User Cannot Select SQLite db Location from UWP App用户无法从 UWP 应用程序中选择 SQLite 数据库位置
【发布时间】: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


    【解决方案1】:

    你不能。 SQLite 需要本地文件访问。要使用本机文件访问,您应该将 sqlite .db 文件放入应用程序本地文件夹 - Windows.Storage.ApplicationData.Current.LocalFolder 或 tempfolder。

    如果您使用文件/文件夹选择器,您可以获得 storagefolder 项目。但是,如果文件夹在您的应用程序之外,则所有文件访问都由操作系统的代理进程完成。 SQLite 无法访问此类文件夹。

    【讨论】:

    • 感谢@pnp0a03 的解释。我预计这是不可能的,但在有人告诉我们原因之前,我们永远无法确定。
    • 这不是一个真正的解决方案,因为这并不总是一种选择。 SQLite 团队需要与 MS 合作并解决这个问题(莫名其妙在 2019 年仍然是一个问题)。
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2020-10-05
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多