带有Silverlight的本地数据库
对于Silverlight应用程序来说,什么是好的本地数据库?数据库的主要目的是用于本地数据缓存和同步服务。我不认为SQL在任何地方或者SQLite都能正常工作,因为它们使用的非托管代码无法在silverlight沙箱下运行
解决方案
@亚伦·菲舍尔(Aaron Fischer),
我对这个问题也很感兴趣。我正在寻找XBAP(浏览器中的WPF)应用程序的数据库。这是我的问题"我们可以推荐哪些支持隔离存储的嵌入式数据库?"
SQLite和MSSQL CE(在任何地方都称为SQL)将无法正常工作。
VistaDB在.NET中实现,可以在约束条件下工作(它支持隔离存储),但我正在寻找替代方法。
另一个选择是Sybase iAnywhere,但是我不确定如何在最终用户计算机上部署它。
我将尝试用于Silverlight的DB4objects。如果可行,我将更新该帖子。
根据此示例,可以使用Google Gears,从而可以使用Sqlite。主要缺点是集成工作量大,并且需要在客户端计算机上再安装一个平台。
如果缓存需求足够基本,并且没有太多数据需要这样做以最大程度地减少RAM使用量,则可能甚至不需要完整的数据库。我们可以使用诸如字典之类的结构来创建各种对象数据库,然后将本来是表行的对象放入其中。然后,我们可以将此数据序列化到本地存储中的文件,并在下次运行该应用程序时反序列化。如果数据结构做得很好,我们甚至可以使用Linq查询对象数据库。
如果主要目标是最大程度地减少必须从服务器提取相同数据的次数,则可能需要考虑这一点。
另一方面,如果我们有太多数据或者对数据库进行频繁写入(这将因此每次都必须将整个结构序列化到磁盘),那么这并不是要走的路。
如果确实有太多数据,但仍然想尝试此操作,则可以查看是否存在一种逻辑方法将数据分区为多个可能不需要同时使用的文件。然后,我们可以将未使用的数据推送到磁盘,并在下次程序需要时将其重新加载。当然,如果我们太过采用这种方法,那么无论如何我们最终都会编写出自己的数据库系统。
我很想看看两件事。 1.)某种持久的本地数据库支持,或者2.)某种实际的数据库服务器支持,而没有网络服务的麻烦。
就个人而言,我将使用Access和OleDb。 :)
最后一件事……该数据库类型的功能是Flash / Flex无法提供的……这对于Microsoft区分Silverlight并真正发挥作用是一个很好的方法。
为什么不使用SL 2中称为"隔离存储"的新功能?它在本地数据库(例如Google Gear)中完全受支持,但当然它不是数据库。我们可以使用XML文件格式来保留它。
- 优点用户只需要安装SL运行时。
- 缺点这不完全是一个数据库
找到两个参考:
蛾在他的博客中说过http://www.danielmoth.com/Blog/2008/04/isolatedstorage-in-siverlight-2-beta-1.html
Dino在http://www.ddj.com/windows/208300036?pgno=2上做了非常好的总结
现在有一个名为csharp-sqlite的sqlite端口
一旦他们找到了可接受的名字,这就有了希望。
答案是siaqodb。 Siaqodb是真正的Silverlight客户端对象数据库,我们可以只用一行代码存储一个对象,然后通过LINQ检索回对象。有关更多信息,请访问http://siaqodb.com。
是的,我认为LINQ提供程序是最佳解决方案。由于存储空间有限,我们实际上并不需要表和索引,因此有一种简单的方法可以方便地通过LINQ在客户端上存储和查询对象,而不必处理低级文件流。