我目前正在编写一种方法,为了降低交易成本,将实体以 100 个批次插入 Azure 表服务。
插入的实体是不可变的。即,如果两个实体对象之间的 PartitionKey 和 RowKey 相同,则意味着所有其他属性也相同。因此,我永远不需要更新此表,因为插入后实体将保持不变。
我面临的问题是,在这批中,我不能 100% 确定之前没有插入任何实体。因此,如果我只是正常插入实体(通过 AddObject 和 SaveChanges),则事务可能会失败,并出现无法添加实体的错误,因为它已经存在。由于事务是原子的,这意味着没有添加任何实体。
我无法检查事务中是否存在每个实体,因为这样做成本太高(每个实体一个查询的成本太高,而使用 OR 的单个查询会导致整个表的表扫描)。因此,我需要某种方法来添加一个对象,如果它不存在并忽略它或更新它,如果它存在(忽略或更新对我来说是相同的,因为实体是不可变的)。
如何在 Azure 表服务中实现这一点?