目前看来是不可能了。所以让我写下其他可能的解决方案和我的经验。
1 - 使用Microsoft.Data.SQLite 包
正如 Xavier Xie 在评论部分所建议的,您可以使用this guide in MSDN。它是一种用于在 UWP 应用中使用 SQLite 的普通库。
出于几个原因,我不喜欢这个。在我看来,它的语法有点冗长,而且入门并不容易。您需要注意您安装的软件包的版本。更重要的是,在我的情况下,您需要更改类的读取和更新函数,因为该类的字段发生变化。因此,与使用 Dapper 等更高级别的库相比,它更难维护。
2 - 使用实体框架
Using entity framework 维护起来比较简单,但是我觉得很难上手。我已经有一个数据库,在这种情况下文档没有那么有用。
3 - 使用不同于 SQLite 的方法进行数据存储
因为我有一些初始数据,而且它不应该变得这么大,所以我更喜欢使用 json 文件来存储和更新它们。
我使用Newtonsoft Nuget Package 进行序列化、反序列化类,并使用ApplicationData Class 存储数据。我认为它们都非常易于使用,并且带有清晰的示例。
这是我所做的部分代码:
const string myDataFilename= "myData.json";
const string backupFolderPath = "ms-appx:///DataModel/";
async Task LoadData()
{
string json = await StorageApi.ReadFromFile(myDataFilename, backupFolderPath + myClassFilename);
try
{
myList = JsonConvert.DeserializeObject<List<myClass>>(json);
}
catch
{
// maybe do some reset logic here
await StorageApi.CopyFile(backupFolderPath + myDataFilename, myDataFilename);
await LoadData();
}
}
async public void saveData()
{
string json = JsonConvert.SerializeObject(myList);
await StorageApi.WriteToFile(myDataFilename, json);
}
我写了a wrapper class for using ApplicationData class 以防链接失效,这里有一些代码:
public static async Task WriteToFile(string relativePath, string data)
{
StorageFile sampleFile = await localFolder.CreateFileAsync(relativePath,
CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(sampleFile, data);
}
// Read data from a file
public static async Task<string> ReadFromFile(string relativePath, string backupPath = "")
{
try
{
StorageFile sampleFile = await localFolder.GetFileAsync(relativePath);
return await FileIO.ReadTextAsync(sampleFile);
}
catch (FileNotFoundException e)
{
Debug.WriteLine( "Relative path: {0}, backupPath: {1}, Error str: {2}", relativePath, backupPath, e.Message);
if (backupPath == "")
return "";
else
{
await CopyFile(backupPath, relativePath);
return await ReadFromFile(relativePath);
}
}
catch (IOException e)
{
Debug.WriteLine(e.Message);
}
return "";
}
public static async Task CopyFile(string src, string relativeDst)
{
try
{
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(
new Uri(src));
await file.CopyAsync(localFolder, relativeDst, NameCollisionOption.ReplaceExisting);
}
catch (FileNotFoundException e)
{
Debug.WriteLine(e.Message);
}
catch (IOException e)
{
Debug.WriteLine(e.Message);
}
}
注意:我将选择此答案作为现在接受的答案。如果出现解决确切问题的更好答案,我会接受它。