Как получить значение ETag для элементов, возвращаемых CreateItemQuery

Я использую версию 3 (предварительная версия) Cosmos DB SDK для .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 возвращается вместе с самим элементом. У кого-нибудь есть решение?


person Anonymous    schedule 02.05.2019    source источник


Ответы (1)


Оказывается, 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
    }
person Anonymous    schedule 03.05.2019