В настоящее время я пишу метод, который для снижения транзакционных издержек вставляет сущности в Azure Table Services партиями по 100 штук.
Вставленные объекты являются неизменяемыми. То есть если PartitionKey и RowKey идентичны между двумя объектами полномочий, это означает, что все остальные свойства также идентичны. Поэтому мне никогда не потребуется обновлять эту таблицу, потому что после вставки сущность останется прежней.
Проблема, с которой я сталкиваюсь, заключается в том, что в этом пакете я не могу быть на 100% уверен, что ни одна из сущностей не была вставлена ранее. Поэтому, если я просто вставляю сущности как обычно (через AddObject и SaveChanges), транзакция может завершиться с ошибкой, что сущность не может быть добавлена, потому что она уже существует. Поскольку транзакция является атомарной, это означает, что ни одно из прав не добавлено.
Я не могу проверить наличие каждого объекта в транзакции, потому что это будет слишком дорого (один запрос на объект стоит слишком дорого, а один запрос с использованием ИЛИ приводит к сканированию таблицы по всей таблице). Поэтому мне нужен какой-то способ добавить объект, если он не существует, и игнорировать его или обновить его, если он существует (игнорирование или обновление для меня будут такими же, поскольку права являются неизменяемыми).
Как мне добиться этого в Azure Table Services?