Как вы обнаружили, вы не можете просто добавить другой элемент с тем же ключом строки и ключом раздела, поэтому вам нужно будет выполнить запрос, чтобы проверить, существует ли элемент уже.В подобных ситуациях полезно посмотреть документацию API Azure REST , чтобы узнать, что доступно клиентской библиотеке хранилища.Вы увидите, что существуют отдельные методы для вставки и обновления . ReplaceOnUpdate действует только при обновлении, а не при вставке.
Хотя вы можете удалить существующий элемент, а затем добавить новый, вы можете просто обновить существующий (сохранениеВы одно путешествие туда и обратно на склад).Ваш код может выглядеть примерно так:
var existsQuery = from e
in tableServiceContext.CreateQuery<MyEntity>(TableName)
where
e.PartitionKey == objectToUpsert.PartitionKey
&& e.RowKey == objectToUpsert.RowKey
select e;
MyEntity existingObject = existsQuery.FirstOrDefault();
if (existingObject == null)
{
tableServiceContext.AddObject(TableName, objectToUpsert);
}
else
{
existingObject.Property1 = objectToUpsert.Property1;
existingObject.Property2 = objectToUpsert.Property2;
tableServiceContext.UpdateObject(existingObject);
}
tableServiceContext.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate);
РЕДАКТИРОВАТЬ: Несмотря на правильность на момент написания, с обновлением от сентября 2011 года Microsoft обновила API таблицы Azure для включения двух команд upsert, Вставить или заменить объект и Вставить или объединить объект