Как получить значение ETag для элементов, возвращаемых CreateItemQuery - PullRequest
0 голосов
/ 02 мая 2019

Я использую V3 (предварительный просмотр) SDK Cosmos DB для .NET .

При получении элемента с использованием ReadItemAsync в результате ETag доступен из CosmosItemResponse обертка объекта сущности SalesOrder :

CosmosItemResponse<SalesOrder> itemResponse = 
    await container.Items.ReadItemAsync<SalesOrder>(
        partitionKey: "Account1",
        id: "SalesOrder1");
Console.WriteLine("ETag of read item - {0}", itemResponse.ETag);

Но при получении элемента с использованием CreateItemQuery (передачаSQL), результат помещается в CosmosQueryResponse , содержащий только массив элементов вместо массива CosmosItemResponse , поэтому я не могу получить ETag каждого элемента.Определение сущности Семейство находится в конце этого файла .

var query = new CosmosSqlQueryDefinition("SELECT * FROM Families f WHERE f.id = @id AND f.Address.City = @city")
    .UseParameter("@id", "AndersonFamily")
    .UseParameter("@city", "Seattle");
List<Family> results = new List<Family>();
var resultSetIterator = container.Items.CreateItemQuery<Family>(query, partitionKey: "Anderson");
while (resultSetIterator.HasMoreResults) {
    results.AddRange((await resultSetIterator.FetchNextSetAsync()));
}

Я не могу найти другие способы получения элементов с использованием SQL, поэтому ETag возвращается ссам предмет.У кого-нибудь есть решение?

1 Ответ

0 голосов
/ 03 мая 2019

Оказывается, ETag и другие системные атрибуты уже были добавлены. Я сделал свои объекты-сущности производными от пользовательского класса, который имеет системные атрибуты CosmosDB, такие как ниже

    public class CosmosDBEntity
    {
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }   // for CosmosDB required id, initialize with Guid.NewGuid().ToString()
        [JsonProperty(PropertyName = "_etag")]
        public string ETag { internal get; set; }   // for CosmosDB so we can get the ETag but doesn't get serialized to CosmosDB
    }
...