1

该问题仅与 azurite 有关,因为使用实际的 Azure 表可以正常工作。我注意到在 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();
    }
}
4

1 回答 1

0

这个概念很简单。Conflict当您尝试插入一个新实体但表中已经有一个具有相同PartitionKeyand的实体时,总是会出现RowKey

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

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

于 2021-01-24T11:51:52.773 回答