DataServiceContext.ExecuteBatch(DataServiceRequest[]) Método

Definição

Envia um grupo de consultas como um lote para o serviço de dados.

public System.Data.Services.Client.DataServiceResponse ExecuteBatch (params System.Data.Services.Client.DataServiceRequest[] queries);

Parâmetros

queries
DataServiceRequest[]

Matriz de objetos DataServiceRequest que compõem as consultas.

Retornos

A resposta para a operação em lote.

Exemplos

O exemplo a seguir mostra como chamar o ExecuteBatch método para executar uma matriz de DataServiceRequest<TElement> objetos que contém consultas que retornam Customers objetos e Products do serviço de dados Northwind. A coleção de QueryOperationResponse<T> objetos no retornado DataServiceResponse é enumerada e a coleção de objetos contidos em cada QueryOperationResponse<T> um também é enumerada. Este exemplo usa o DataServiceContext gerado pela ferramenta Adicionar Referência de Serviço com base no serviço de dados Northwind, que é criado quando você conclui o WCF Data Services .

string customerId = "ALFKI";

// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

// Create the separate query URI's, one that returns
// a single customer and another that returns all Products.
Uri customerUri = new Uri(svcUri.AbsoluteUri +
    "/Customers('" + customerId + "')/?$expand=Orders");
Uri productsUri = new Uri(svcUri.AbsoluteUri +
   "/Products");

// Create the query requests.
DataServiceRequest<Customer> customerQuery =
    new DataServiceRequest<Customer>(customerUri);
DataServiceRequest<Product> productsQuery =
                new DataServiceRequest<Product>(productsUri);

// Add the query requests to a batch request array.
DataServiceRequest[] batchRequests =
    new DataServiceRequest[]{customerQuery, productsQuery};

DataServiceResponse batchResponse;

try
{
    // Execute the query batch and get the response.
    batchResponse = context.ExecuteBatch(batchRequests);

    if (batchResponse.IsBatchResponse)
    {
        // Parse the batchResponse.BatchHeaders.
    }
    // Enumerate over the results of the query.
    foreach (QueryOperationResponse response in batchResponse)
    {
        // Handle an error response.
        if (response.StatusCode > 299 || response.StatusCode < 200)
        {
            Console.WriteLine("An error occurred.");
            Console.WriteLine(response.Error.Message);
        }
        else
        {
            // Find the response for the Customers query.
            if (response.Query.ElementType == typeof(Customer))
            {
                foreach (Customer customer in response)
                {
                    Console.WriteLine("Customer: {0}", customer.CompanyName);
                    foreach (Order order in customer.Orders)
                    {
                        Console.WriteLine("Order ID: {0} - Freight: {1}",
                            order.OrderID, order.Freight);
                    }
                }
            }
            // Find the response for the Products query.
            else if (response.Query.ElementType == typeof(Product))
            {
                foreach (Product product in response)
                {
                    Console.WriteLine("Product: {0}", product.ProductName);
                }
            }
        }
    }
}

// This type of error is raised when the data service returns with
// a response code < 200 or >299 in the top level element.
catch (DataServiceRequestException e)
{
    // Get the response from the exception.
    batchResponse = e.Response;

    if (batchResponse.IsBatchResponse)
    {
        // Parse the batchResponse.BatchHeaders.
    }

    foreach (QueryOperationResponse response in batchResponse)
    {
        if (response.Error != null)
        {
            Console.WriteLine("An error occurred.");
            Console.WriteLine(response.Error.Message);
        }
    }
}

Comentários

As consultas são especificadas como DataServiceRequest<TElement> instâncias. Retorna um DataServiceResponse que representa a resposta da solicitação em lote como um todo. As respostas de consulta individuais são representadas como objetos individuais OperationResponse que podem ser acessados enumerando a DataServiceResponse instância .

Quando esse método retorna toda a resposta HTTP para a solicitação em lote foi lida do fluxo de rede, mas as respostas não foram processadas. Nenhuma resolução de identidade ou materialização de objeto ocorre para uma entidade especificada na resposta até que ela seja enumerada.

Aplica-se a

Produto Versões
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Confira também