到目前为止,我一直依赖 TableResult.HttpStatusCode = 204
作为 Insert
操作的肯定结果,如下所示:
TableResult.HttpStatusCode Property
如果实体已经存在,我会得到一个 200
,如果插入操作成功,我会得到一个 204
。我还尝试在 TableOperation
上使用 echoContent
参数,如下所示:
在我的情况下,echoContent
不会返回任何内容,所以我不确定我是否做错了什么或者我是否在追逐 unicorn 。我不确定 echoContent
是否只是发回您发送给它的数据,或者它是否实际上回显了书面实体。
有没有更好的验证方法?我是否过于依赖 Azure 表存储的 REST api,还是我们只有这些?
最佳答案
我实际上是先执行读取操作,然后评估结果以查看代码中是否存在重复项。在没有首先检查的情况下执行的插入操作确实返回了 409
,但是这是在调试由于在现有实体之上插入而导致的异常后发现的。
我的第一段代码是一个不太频繁的事件,更重要的是我检查重复的实体,这就是为什么我首先执行读取,然后检查,然后插入。
我的后一个代码来自一个 API,该 API 正在接收大量数据,我不想在插入之前通过查找和比较来增加事务负担。
为了解决这个问题,我设置了一个 try/catch block 来监视 409
的特定异常类型:
catch (Microsoft.WindowsAzure.Storage.StorageException e) when (e.RequestInformation.HttpStatusCode == 409)
{
TableResult tableResult = new TableResult();
tableResult.HttpStatusCode = e.RequestInformation.HttpStatusCode;
tableResult.Result = e.Message;
return tableResult;
}
由于我的方法返回 TableResult
类型,因此我必须格式化新的 tableResult
以发送回调用者。在调用者上使用 switch 语句,我能够处理各种场景(成功/异常)。
关于c# - 验证 Azure 表插入操作的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52543741/