【问题标题】:Handling conflict with entity group transactions in Azure在 Azure 中处理与实体组事务的冲突
【发布时间】:2025-12-04 07:55:02
【问题描述】:

我目前正在编写一种方法,为了降低交易成本,将实体以 100 个为一组插入 Azure 表服务。

插入的实体是不可变的。 IE。如果两个实体对象之间的 PartitionKey 和 RowKey 相同,则意味着所有其他属性也相同。因此,我永远不需要更新此表,因为插入后实体将保持不变。

我面临的问题是,在这批中,我不能 100% 确定之前没有插入任何实体。因此,如果我只是正常插入实体(通过 AddObject 和 SaveChanges),则事务可能会失败,并出现无法添加实体的错误,因为它已经存在。由于事务是原子的,这意味着没有添加任何实体。

我无法检查事务中是否存在每个实体,因为这样做成本太高(每个实体一个查询的成本太高,而使用 OR 的单个查询会导致对整个表进行表扫描)。因此,我需要某种方法来添加一个对象,如果它不存在并忽略它或更新它,如果它存在(忽略或更新对我来说是相同的,因为实体是不可变的)。

如何在 Azure 表服务中实现这一点?

【问题讨论】:

    标签: c# azure entity-group-transactions


    【解决方案1】:

    根据this article,如果实体已经存在,目前还没有办法“更新”它。当前的建议是使用多个工作角色和多个线程检查每个实体的存在来处理请求。

    【讨论】:

    • 自 2011 年 9 月中旬以来,如 Microsoft Build Conference 中所述,Upsert 操作已在 Azure 中实现。
    最近更新 更多