我找到的每个示例都会为您创建数据库,然后让您创建表并在代码中填充它们。不过,我的问题是我想在其他地方创建并填充数据库(SQLiteStudio),然后将其包含在我的应用程序中。
我感觉(通过我一直在查看的内容的总体感觉。我们将其称为文档)您应该将数据库复制到
Environment.SpecialFolder.Personal
目录。所以我的工作流程是将数据库作为资源包含在内,然后将其复制到 Environment.SpecialFolder.Personal
目录。是对的吗?有没有人简洁而权威地写下这些内容(而不是松散的文章集)?
我不想拥有同一个数据库的两个副本,但如果其他人都这样做的话......好吧。
我无法在以下任何网页上找到答案。
https://forums.xamarin.com/discussion/8188/creating-database-with-sqlite-only-once
https://github.com/praeclarum/sqlite-net/wiki/GettingStarted
https://forums.xamarin.com/discussion/3773/system-environment-specialfolder
https://forums.xamarin.com/discussion/36285/where-do-you-store-your-sqlite-database-in-the-app
https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/databases
自从您标记了 pcl 以来,您是否尝试过将其视为嵌入式资源?您几乎只需创建一个文件夹,放入数据库,然后将构建操作设置为嵌入资源即可。您可以通过链接到数据库所在的路径,通过 SQLite 库访问该文件。
https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/files?tabs=vswin
如果您正在寻找
.Net Maui
解决方案:
在此示例中,我们检查
app.dp3
是否存在,如果不存在,则我们从随资源附带的 prebuilt.db3
创建它。
builder.Services.AddTransient<LocalDatabase>((services) =>
{
var filenameDb = Path.Combine(FileSystem.AppDataDirectory, "app.db3");
if (!File.Exists(filenameDb))
{
using var stream = FileSystem.OpenAppPackageFileAsync("Something/prebuilt.db3").GetAwaiter().GetResult();
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
File.WriteAllBytes(filenameDb, memoryStream.ToArray());
}
}
return new LocalDatabase(filenameDb);
});