3

我有一个导入过程,它从旧源获取数据并将其放入表存储中,这使我可以重新初始化表存储并根据需要重新开始。它在更新到 .NET 的 10 月 Azure SDK (VS2012) 之前一直在工作。现在,在插入一些实体后它失败了(它似乎有所不同,导入的数据本质上不是静态的)。相同类型的第一个实体始终插入成功。分区键是唯一的,每个分区键的 RowKey 是一个空字符串(空)。它在SaveChangesWithRetries(). 新 SDK 中是否有任何与我之前所做的不兼容的更改?

更新

我一直在通过查询表存储数据库来检查成功插入行的实际 XML。我注意到的一件事是,实体上的可为空的 int 列在为nvarchar(max)空和int不为空时具有 SqlType。这是故意的吗?

4

3 回答 3

8

因此,我能够以一致的方式成功地重现该错误,事实证明这是 2012 年 10 月 SDK 中引入的一个非常讨厌的错误。

任何以空格结尾的字符串都会引发异常。在所有字符串输入上调用 Trim() 已经解决了这个问题。

于 2012-10-28T22:03:13.247 回答
1

这显然是模拟器的问题之一。您可能知道,它模拟 SQL Server 中的表存储。这在大多数情况下都有效,但是当您尝试做一些特殊的事情时,例如添加额外的属性,或者在您的情况下只是在属性中混合可空值和不可空值时,事情往往会变糟。

本页解释了实际的表存储服务和模拟器中的实现之间的差异。但是您的问题似乎还没有记录在案。您会发现很多关于 Table Storage 模拟器问题的报告(也在StackOverflow上)。

您唯一的解决方案是使用真实的存储帐户而不是使用模拟器进行开发。

于 2012-10-28T19:18:31.083 回答
1

此问题已在更高版本的 Windows Azure SDK 中得到修复。安装最新版本以解决问题。http://www.windowsazure.com/en-us/downloads/

于 2013-09-26T00:32:10.267 回答