表存储(模拟器)插入失败,其中“其中一个请求输入无效”。

时间:2012-10-27 22:51:06

标签: azure azure-table-storage

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

更新

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

3 个答案:

答案 0 :(得分:8)

所以,我已经能够在一致的基础上成功地重现错误,结果证明这是2012年10月SDK中引入的一个非常讨厌的错误。

以空格结尾的任何字符串都将导致抛出异常。在所有字符串输入上调用Trim()已解决此问题。

答案 1 :(得分:1)

这显然是模拟器的问题之一。您可能知道,它模拟SQL Server中的表存储。这在大多数情况下都适用,但是当你尝试做一些特别的事情,比如添加额外的属性时,或者在你的情况下,简单地在属性中混合可空和不可为空的值,事情往往会变坏。

This页面解释了实际表存储服务与模拟器中实现之间的差异。但是你的问题似乎还没有被记录下来。您可以找到许多表存储模拟器问题的报告(也在StackOverflow上)。

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

答案 2 :(得分:1)

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