TableOperation.Insert总是返回冲突409,TableOperation.InsertOrReplace成功

问题描述

在问题仅涉及AZURITE作为使用实际天青表工作正常。我注意到,在石青搜索任何实体不返回的ETag。

使用下面的实体,TableOperation.Insert总是成功,但总是返回Conflict 409,即使新的实体被添加到表中。

TableOperation.InsertOrReplace总是成功,并且不引发异常。

有表中没有重复,所以没有明显的理由Insert应该失败和InsertOrReplace应该会成功。是否有任何理由Insert将取得成功,并在同一时间失败?

public class MessageQEntity : TableEntity
{
    public string Message { get; set; }
    public string Status { get; set; }

    public MessageQEntity()
    {
        PartitionKey = "Region";
        RowKey = Guid.NewGuid().ToString();
    }
}

解决方法

这个概念非常简单。 Conflict 总是在您尝试插入新实体但表中已经存在具有相同 PartitionKeyRowKey 的实体时出现。

在您的情况下,由于您没有向我展示代码,您应该通过更新 MessageQEntity 和/或 Message 字段来重用 Status 的相同对象来插入新实体,但不是RowKey

为什么 InsertOrReplace 按预期工作很简单,因为它知道存在一个现有实体,因此,它用新添加的实体替换该实体 :)