问题描述
在问题仅涉及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
总是在您尝试插入新实体但表中已经存在具有相同 PartitionKey
和 RowKey
的实体时出现。
在您的情况下,由于您没有向我展示代码,您应该通过更新 MessageQEntity
和/或 Message
字段来重用 Status
的相同对象来插入新实体,但不是RowKey
。
为什么 InsertOrReplace
按预期工作很简单,因为它知道存在一个现有实体,因此,它用新添加的实体替换该实体 :)