【问题标题】:Why is it not possible to use Sqlite in Blazor WebAssembly?为什么不能在 Blazor WebAssembly 中使用 Sqlite?
【发布时间】:2021-08-30 02:58:49
【问题描述】:

对于使用 blazor wasm 构建的平台解决方案,我正在寻找一种能够在客户端存储大型数据集的轻量级存储解决方案。我们提出了使用 Sqlite 的想法。 我真的找不到任何关于这样做的信息,从今天开始期待这个Stackoverflow question,它提到这是不可能的。对此有何解释?

非常感谢!

【问题讨论】:

  • 我看到了,这里用到了executecommands.com/…
  • Naaw .. 它不是。但我也看错了。今年三月有人问。是的,我看到了这篇博文……它是关于 Blazor Server 的。
  • 如果不出意外,sqlite 库是使用原生 C 编写的,浏览器不允许您执行任意 C 代码(如果这样做将非常不安全!)。即使您确实设法破坏了浏览器,sqlite 库也会假定您有一个文件系统,但浏览器不会为您提供文件系统
  • 你可能最好使用IndexedDB
  • @canton7 谢谢!到目前为止,我只在 Android 上使用了 Sqlite,其中提供了 API 和文件系统。我会检查 IndexedDB

标签: c# sqlite blazor blazor-webassembly


【解决方案1】:

从 .NET 6 开始,您可以在 Blazor WebAssembly 中使用包含本机依赖项,​​其中一个示例实际上是 SQLite。在此处查看示例代码:https://github.com/SteveSandersonMS/BlazeOrbital/blob/6b5f7892afbdc96871c974eb2d30454df4febb2c/BlazeOrbital/ManufacturingHub/Properties/NativeMethods.cs#L6

【讨论】:

【解决方案2】:

您的 Blazor WebAssembly C# 代码仍在浏览器的沙箱中运行,这意味着它不允许打开本地驱动器上的文件。

Blazor WebAssembly 对机器的访问权限与任何常规网站相同。

即使有人将 SQLite 移植到 WebAssembly,您也无法打开数据库文件。

对于客户端计算机上的存储,您仅限于本地存储,它被限制为 5 MB(可能因浏览器品牌而异)并且只能包含字符串。但这不是一个可靠的选择,因为当用户清除缓存、浏览器历史记录等时,数据将被删除。

您唯一的选择是将数据存储在服务器上。

【讨论】:

  • 再次感谢。由于 canton7 回答了我的问题,我开始使用 IndexedDb 进行一些测试。据我发现,根据mozilla documentation,理论上每个“组”最多可以存储 2 GB。是的,它仍然是缓存的一部分,并在用户清除缓存时被删除。但是,这似乎是迄今为止最好的解决方案。啊。是的,毫无疑问,后端有一个持久层。
  • IndexedDb 听起来很有趣。似乎所有浏览器都支持它。谢谢。
猜你喜欢
  • 2022-11-25
  • 2021-12-22
  • 1970-01-01
  • 2020-01-27
  • 2021-07-15
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2022-10-12
相关资源
最近更新 更多