Win8 Metro风格应用中结构化数据的本地存储

14
在桌面.NET应用程序中,实现本地关系型数据库的标准选项是使用SQL Server Compact Edition,当然还有使用SQLite和其他第三方引擎的可能性。
.NET Metro-style应用程序有哪些可用选项?SQL CE似乎不可用 - 是否有替代方案?实际上,整个System.Data命名空间似乎都消失了 - 因此没有LINQ to SQL或Entity Framework?
那么HTML5 IndexedDB似乎可以在Metro HTML/JS应用程序中使用 - 是否可以从.NET中的某个地方使用它?

Windows.Storage 命名空间就是它。SQL 的那些家伙总是迟到,不是吗 :) - Hans Passant
@Hans 这让你可以直接处理文件,但我正在寻找一些不需要手动查找的东西 - 最好是关系型或面向对象的数据库,或者至少是支持文件的键值映射。我敢打赌 db4o 的人很快就会出现,但在那之前呢? - Pavel Minaev
2个回答

1

显然,可扩展存储引擎 Win32 API(又称“JET Blue”)仍然可以在Metro应用程序中使用。C++应用程序可以通过#include <esent.h>直接使用它。.NET应用程序需要使用P/Invoke。这并不提供SQL或任何其他类型的高级关系查询结构,但它提供了关键查找、事务、每个表的多个索引和多字段索引。


1
.NET应用程序可以使用ManagedEsent(http://managedesent.codeplex.com/)而不是P / Invoke,它已经为您完成了许多艰苦的工作。 - Matt Warren

0

让我们明确一点:SQL CE存在于Windows 8中。它不仅存在于Program Files中,还存在于Windows\System32中,看起来比以前更加嵌入。Windows7在system32中没有sqlcecompact40.dll,所以这肯定是新的。System.Data和System.Data.Linq都存放在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5中。

您可以手动添加对这些dll的引用,但编译应用程序有时会成功,有时会失败。似乎如果您首先打开项目并什么也不做,则可以在任何地方添加对这些dll的引用并编译应用程序。如果您删除了dll并尝试将它们添加回去,则会出现“无法添加对'<4.5框架目录>'的引用”。如果您无法通过Visual Studio添加它们,可以轻松地手动添加HintPath。

我的应用现在可以编译,但是遇到了一个问题,链接AppX不正确,出现了类似“Payload cannot contain 2 of the same dll”类型的加密消息。就像它试图在最后一分钟同时包括32位(我链接的那个)和64位一样。它包含了我没有手动操作的DLL,如System.Data.OracleClient或System.Transactions,因此肯定是某些构建过程中的工件,我还没有再次看到。
我现在正在处理的主要问题是如何生成适当的连接字符串,因为如果没有连接字符串,它将无法正确初始化。 SQL CE可能仍在寻找硬编码的C:\引用,因此ApplicationData示例可能无法按预期工作。我可能会尝试在Win7中创建SQL CE 4数据库,然后转移到Win8并直接引用它们,但我在那里也有点束手无策。这 | | 差点!
如果您遇到任何问题,请随时发表评论,并且我绝对愿意进行离线协作,如果任何人想要合并资源。这绝对是一个充满了巨兽的浓密森林,独自前行变得更具挑战性。

好像连接字符串问题比我想象的要严重。我收到了这个错误信息:提供程序“System.Data.SqlServerCe.3.5”未安装。由于没有应用程序/ web.config,即使包括相关的dll,也无法解决此问题,这可能是一个永久性的停止点。不过,这让我想知道为什么会包含SQL CE,除非某些东西以某种方式访问它。 - w0rd-driven
1
仅仅因为DLL在Win8中存在,并不意味着你可以从Metro应用程序中使用它。如果它调用了任何在Metro应用程序容器中被禁止的Win32 API(而且有很多),它将无法运行。即使它运行了,它仍然无法通过Windows Store的提交流程。请注意,ESENT已经被明确列入应用程序容器的白名单! - Pavel Minaev
此外,您不能随意将.NET 4.5中的任意程序集拖入您的Metro应用程序中。它使用自己的子集,即.NET 4.5 Core,其中许多程序集被特别排除在外。原则是相同的 - 即使您手动添加了完整配置文件中的程序集引用,它要么不起作用;要么如果它起作用,您的应用程序将无法通过Windows Store的审核。 - Pavel Minaev
你说得对,我甚至没有考虑到这是在认证的背景下。我只是看到 SQL CE 嵌入到操作系统中,并且由于它包含在 WebMatrix 等东西中,就得出结论说这可能会成为我们首选的本地存储介质。至少它似乎对大多数人来说提供了最少的阻力。SQL CE 仅仅因为被嵌入操作系统而让我感到沮丧,因为目前来看,显然没有理由? - w0rd-driven
请记住,Win8不仅仅是关于Metro应用程序。如果您想进入Windows Store,您必须使用Metro,但在许多领域,普通的桌面应用程序更有意义-并且它可以访问所有现有的框架,包括SQLCE和完整的.NET 4.5。 - Pavel Minaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接