ReplaceDocumentAsync без Document это возможно? - PullRequest
0 голосов
/ 16 февраля 2019

Я запрашиваю документ и отправляю его в мое угловое приложение.Затем я редактирую модель и отправляю ее обратно.Мой вопрос: можно ли обновить документ только из модели?Документ не имеет конструкторов, а ReplaceDocumentAsync требует Document?Или мне сначала нужно запросить документ, чтобы получить тот же объект, который я затем должен отредактировать?

public void Put([FromBody] VesselView vessel)
{
   var collectionLink = UriFactory.CreateDocumentCollectionUri("AssetControl", "Vessels");
  _cosmosDocClient.ReplaceDocumentAsync(vessel);

}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Да, вы можете. Вам нужно знать только id документа, который вы хотите заменить.Протестировано с клиентом .Net Microsoft.Azure.DocumentDB v2.2.1.

Это может быть достигнуто, когда передает предполагаемый новый документ как JObject.Для этого вы можете использовать любой сериализатор Json.Также обратите внимание, что ваша модель не должна содержать внутренние поля документа, такие как _rid, _ts и т. Д.

Пример кода:

var client = new DocumentClient(url, key, policy);
var documentUri = UriFactory.CreateDocumentUri("myDB", "myCollection", "_replaceTest");

var newModel = JObject.Parse(@"{""id"": ""_replaceTest"",   ""myData"": ""replaced!""}");
var response = await client.ReplaceDocumentAsync(documentUri, newModel);
var fromStorage = response.Resource;

Возвращенная модель - полная модель, содержащаядополнительные поля модели:

{
  "id": "_replaceTest",
  "_rid": "FOOBAR==",
  "_self": "dbs/FOO==/colls/BAR=/docs/FOOBAR==/",
  "_ts": 1550491238,
  "_etag": "\"0000e379-0000-0000-0000-5c6a9e660000\"",
  "myData": "replaced!"
}

Очевидно, что, как намекнул Дэвид Макогон, вы не можете полагаться на _etag, проверяйте этот способ, если только вы не включите это свойство в модель, отправляемую в DocumentDB.

0 голосов
/ 16 февраля 2019

Сначала необходимо получить исходный документ.Он содержит внутренние свойства, такие как _etag (для проверки параллелизма), которые в противном случае были бы недоступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...