Visão geral sobre o controle de servidor Web LinqDataSource

O controle LinqDataSource expõe consulta integrada à linguagem (LINQ) para os desenvolvedores Web através da arquitetura de controle da fonte de dados do ASP.NET.LINQ fornece uma modelo de programação unificado para requisitar e atualizar dados de diferentes typos de fontes de dados e estende as capacidades dos dados diretamente para o C# e Visual Basic languages.LINQ simplifica a interação entre programação orientada a objetos e dados relacionais aplicando princípios de programação orientada a objetos a dados relacionais.Para obter mais informações sobre o LINQ, consulte Language-Integrated Query (LINQ).

Usando marcação declarativa, você pode criar um controle LinqDataSource que se conecta aos dados de um banco de dados ou uma coleção in-memory de dados como num array.No texto declarativo, você pode gravar todas as condições necessárias para recuperar, filtrar, pedir e agrupar os dados.Quando você recupera dados de uma tabela de banco de dados SQL, você também pode configurar um LinqDataSource controle para tratar, atualizar, inserir e excluir dados.O controle faz isso sem exigir que você escreva os comandos SQL para executar essas tarefas.A classe LinqDataSource também fornece um modelo de evento que habilita você a tratar cenários personalizados.

Esse tópico contém:

  • Cenários

  • Segundo plano

  • Exemplos de código

  • Referência de Classe

Cenários

Você usa o controle LinqDataSource quando você cria um página da Web que recupera ou modifica os dados e você deseja aproveitar do modelo de programação unificado fornecido pelo LINQ.Você pode simplificar o código em um página da Web ativando o controle LinqDataSource para criar os comandos para interagir com os dados automaticamente.

Voltar ao topo

Segundo plano

O controle LinqDataSource oferece uma maneira para se conectar a um controle de dados para uma ampla variedade de fontes de dados.Isso inclui dados do banco de dados, classes de fontes de dados e coleções de memória.O controle LinqDataSource permite que você especifique tarefas de recuperação de banco de dados semelhantes (selecionamento, filtragem, agrupamento e classificação) contra todos esses tipos de fontes de dados.Você pode especificar modificação de tarefas (atualizar, excluir e inserir) contra as tabelas do banco de dados.

Você pode conectar o controle LinqDataSource para qualquer tipo de coleta de dados que é armazenado em um campo público ou propriedade.A marcação declarativa e o código para executar operações de dados são as mesmas para todas as fontes de dados.Você não é tem que usar sintaxes diferentes quando você interagir com dados de uma tabela de banco de dados ou de uma coleção de dados como um array.

Para obter uma introdução ao controle LinqDataSource, consulte Passo-a-passo: recuperação, atualização, inserção e exclusão de dados com o LinqDataSource e controles DetailsView.

Conectando-se a Dados a partir de um Banco de Dados

Quando você interage com dados de um banco de dados, você não se conecta ao controle LinqDataSource diretamente para o banco de dados.Instead, you interact with entity classes that represent the database and the tables.You can generate the entity classes through the Object Relational Designer or by running the SqlMetal.exe utility.Para obter mais informações, consulte Object Relational Designer (O/R Designer) ou Ferramenta de geração de código (SqlMetal.exe). As classes de entidade criadas normalmente estará localizadas na pasta App_Code do aplicativo Web Web. The Designer Relacional de Objetos or the SqlMetal.exe utility will generate one class that represents the database and one class for each table in the database.

A classe que representa o banco de dados é responsável por recuperar e definir valores na fonte de dados.O controle LinqDataSource lê e define as propriedades na classe que representa a tabela de dados.Para dar suporte às operações de atualização, inserção e exlusão, a classe Banco de dados deve derivar da classe DataContext e a classe de tabela deve se referir a uma classe Table<TEntity>.

You connect the LinqDataSource control to a database class by setting the ContextTypeName property to the name of the class that represents the database.You connect the LinqDataSource control to a particular table by setting the TableName property to the name of the class that represents the data table.Por exemplo, para conectar-se à tabela de contatos no banco de dados AdventureWorks, você define a propriedade ContextTypeName como AdventureWorksDataContext (ou qualquer nome que você especificar para o objeto de banco de dados).You set the TableName property to Contacts.O exemplo a seguir mostra a marcação de um controle LinqDataSource que se conecta ao banco de dados AdventureWorks.

<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

O exemplo não mostra a classe gerada por Designer Relacional de Objetos, porque o código gerado é muito longo para este tópico.No entanto, o código gerado deve existir para o exemplo trabalhar.Para obter mais informações, consulte Code Generation in LINQ to SQL.

Conectando-se a Dados a partir uma Coleção de Memória

Quando você se conecta à coleção de dados em memória como um array, você define a propriedade ContextTypeName com o nome da classe que contém a coleção.Você define a propriedade TableName com o próprio nome da coleção.

O exemplo a seguir mostra uma classe que contém um array de valores de sequência de caracteres.

Public Class MovieLibrary
    Dim _availableGenres() As String = {"Comedy", "Drama", "Romance"}

    Public ReadOnly Property AvailableGenres() As String()
        Get
            Return _availableGenres
        End Get
    End Property

End Class
public class MovieLibrary
{
    string[] _availableGenres = { "Comedy", "Drama", "Romance" };

    public MovieLibrary()
    {
    }

    public string[] AvailableGenres
    {
        get
        {
            return _availableGenres;
        }
    }
}

O exemplo a seguir mostra um controle LinqDataSource que lê a lista de gêneros de filme da classe do exemplo anterior.Para recuperar o array de gêneros, você define a propriedade ContextTypeName como MovieLibrary e define a propriedade TableName para AvailableGenres.

<asp:LinqDataSource 
    ContextTypeName="MovieLibrary" 
    TableName="AvailableGenres" 
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

Usando o Controle LinqDataSource com Controles Vinculados a Dados

Para exibir os dados a partir de um controle LinqDataSource, você pode acoplar um controle vinculado a dados para o controle LinqDataSource.Por exemplo, você acopla um controle DetailsView, um controle GridView ou um controle ListView a um controle LinqDataSource.Para fazer isso, você define a propriedade DataSourceID do controle vinculado a dados para a identificação do controle LinqDataSource.O exemplo a seguir mostra um controle GridView que exibe todos os dados a partir de um controle LinqDataSource.

<asp:LinqDataSource 
    
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    ID="LinqDataSource1">
</asp:LinqDataSource>
<asp:GridView 
    ID="GridView1" 
    
    DataSourceID="LinqDataSource1" >
</asp:GridView>

O controle vinculado a dados automaticamente cria a interface de usuário para exibir os dados do controle LinqDataSource.Ele também pode fornecer a interface para a classificação e paginação dos dados.Quando as modificações de dados estiverem ativadas, um controle vinculado a dados fornece a interface para atualizar, inserir e excluir registros.

Você pode restringir quais dados (propriedades) são exibidos por configurar o controle vinculado a dados para não gerar automaticamente campos de controle de dados.Em seguida, você pode definir esses campos explicitamente no controle vinculado a dados.O controle LinqDataSource recupera todas as propriedades, mas o controle vinculado a dados exibe somente as propriedades que você especificar.O exemplo a seguir mostra um controle GridView que exibe somente as propriedades Name e StandardCost da tabela Produtos no banco de dados AdventureWorks.A propriedade AutoGenerateColumns é definida como false.

<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Products" 
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1" 
    AutoGenerateColumns="false"
    ID="GridView1" 
    >
    <Columns>
        <asp:BoundField DataField="Name" />
        <asp:BoundField DataField="StandardCost" />
    </Columns>
</asp:GridView>

Se você tiver que restringir quais propriedades são retornadas na consulta, você define essas propriedades configurando a propriedade Select do controle LinqDataSource.

Comparando o controle LinqDataSource com outros Controles da Fonte de Dados

Usando o controle LinqDataSource, você pode escrever menos código para executar operações em comparação a trabalhar com os controles SqlDataSource ou os ObjectDataSource.O controle LinqDataSource pode interpretar informações sobre a fonte de dados que você está se conectando e criar dinamicamente os comandos para selecionar, atualizar, inserir e excluir dados.Quando você usa o controle LinqDataSource, você também deve aprender apenas um modelo de programação para interagir com diferentes tipos de fontes de dados.

Comparando o controle SqlDataSource

Ao contrário so controle SqlDataSource, que funciona somente com tabelas de bancos de dados relacionais, o controle LinqDataSource permite que você se conecte aos dados que estão armazenados na memória em coleções.Quando você usa o controle SqlDataSource, você deve explicitamente definir as propriedades SelectCommand, UpdateCommand, InsertCommand e DeleteCommand para consultas SQL.No entanto, com o controle LinqDataSource você não precisará definir explicitamente esses comandos, porque o controle LinqDataSource usa LINQ to SQL para criá-los automaticamente.Se você quiser modificar as colunas que foram selecionadas de uma fonte de dados, você não tem que gravar um comando completo Selecionar SQL.Em vez disso, você fornece os nomes das colunas que você deseja retornar na consulta na propriedade Select.

Quando você atualizar ou inserir dados, você não tem que criar parâmetros para cada valor que será salvo no banco de dados.O controle LinqDataSource pode criar comandos que incluem os valores apropriados combinando a propriedade DataField com os nomes de propriedades na classe entidade de atualização.

Comparando o Controle ObjectDataSource

Quando você usa o controle ObjectDataSource, você deve criar manualmente o objeto que representa os dados e escrever os métodos para interagir com os dados.Você deve, em seguida, cruzar as propriedades SelectMethod, UpdateMethod, InsertMethod e DeleteMethod para os métodos que executam essas funções.No controle LinqDataSource, você usa o Designer Relacional de Objetos para criar as classes que representam os dados automaticamente.Você não tem que escrever código para especificar quais colunas existem na tabela de banco de dados ou como selecionar, atualizar, inserir e excluir dados.Você também pode usar o controle LinqDataSource para interagir diretamente com um conjunto de dados como um array.Nesse caso, você não precisará criar uma classe para manipular a lógica para interagir com a coleção de dados.

Selecionando dados

Se você não especificar um valor para a propriedade Select do controle LinqDataSource, todas as propriedades na classe fonte de dados são recuperadas.Por exemplo, o controle LinqDataSource retorna um valor para cada coluna em um tabela de banco de dados.

Você pode restringir quais propriedades serão recuperadas a partir de fonte de dados, definindo a propriedade Select aos nomes das propriedades que você deseja.Se você desejar retornar apenas uma propriedade, defina a propriedade Select para essa propriedade.Por exemplo, para retornar somente os valores na coluna City se uma tabela de banco de dados, defina a propriedade Select para City.O controle LinqDataSource irá retornar uma coleção List<T> que contém itens digitados corretamente a partir da propriedade.Se a propriedade City for digitada como Texto (string), selecionando a propriedade City retorna uma coleção List<T> de valores de string.

Para recuperar apenas algumas das propriedades da classe de dados, você usa a função new na propriedade Select e especifica quais colunas retornar.A função new é necessária porque você está criando dinamicamente uma classe que contém somente as propriedades que você especificou.Por exemplo, se você desejar recuperar as propriedades City e PostalCode de uma fonte de dados que contém endereços completos, você define a propriedade Select como new(City, PostalCode).O controle LinqDataSource irá retornar uma coleção List<T> que contém as instâncias de uma classe que inclui as propriedades.

Você não tem que usar a função new quando você selecionar apenas uma propriedade, porque o objeto que é retornado é um conjunto simples de valores para essa propriedade.No entanto, para várias propriedades, o controle LinqDataSource deve criar uma nova classe que inclui as propriedades que você especificar.

Calculando valores com a cláusula SELECT

Você pode calcular valores em uma cláusula SELECT.Por exemplo, para calcular um total de item de linha de um pedido, defina a propriedade Select para new(SalesOrderDetailID, OrderQty * UnitPrice As LineItemTotal).A palavra-chave As permite que você atribua um nome (alias) ao valor calculado.Para obter mais informações, consulte Demonstra Passo a passo: Selecionando e filtragem de um subconjunto de dados com os controles GridView e LinqDataSource.

O exemplo a seguir mostra como usar um controle LinqDataSource para recuperar um subconjunto dos dados.No exemplo, a propriedade Select é definida para atribuir um alias para os valores retornados e para calcular um valor.

<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="OrderDetails" 
    Select="new(SalesOrderDetailID As DetailID, 
      OrderQty * UnitPrice As LineItemTotal, 
      DateCreated As SaleDate)"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

Filtrando Dados com a Cláusula Where

Você pode filtrar os dados retornados para recuperar somente os registros que atendem aos critérios específicos.Você faz isso definindo a propriedade Where às condições que devem ser atendidas para um registro a serem incluídos nos dados retornados.Se você não especificar um valor para a propriedade Where, todos os os registros na fonte de dados são recuperados.Você filtra crindor uma expressão de filtro, que usa uma comparação para determinar se um registro deve ser incluído.A comparação pode ser para um valor estático ou para um valor de variável que você especificar com um espaço reservado de parâmetro.

Criando uma Cláusula Where com Valores Estáticos

Quando você comparar o valor em uma propriedade para um valor estático, você define a propriedade Where usando a propriedade e o valor estático.Por exemplo, para retornar somente os registros que possuem um valor ListPrice maior que 1000, defina a propriedade Where para ListPrice > 1000.

Você pode usar o operador &&and para o E lógico e o operador || ou or operadores de lógica OR.Por exemplo, conjunto o Where propriedade para ListPrice > 1000 || UnitCost > 500 || DaysToManufacture > 3 para retornar registros com um ListPrice valor maior que 1000 ou uma UnitCost valor maior que 500 ou um DaysToManufacture valor maior que 3. Para especificar que todas as condições devem ser true para retornar um registro, você definiria a Where propriedade para ListPrice > 1000 && UnitCost > 500 && DaysToManufacture > 3.

Quando você compara valores da string, você deve colocar as condições entre aspas simples de condições e colocar o valor literal entre aspas duplas.For example, set the Where property to 'Category = "Sports"' to retrieve only the records with the Category column equal to "Sports".

O exemplo a seguir mostra um controle LinqDataSource que recupera os dados que foram filtrados por um valor da string e um valor numérico.

<asp:LinqDataSource
  ContextTypeName="ExampleDataContext"
  TableName="Product"
  Where='Category = "Sports" && Weight < 10'
  ID="LinqDataSource1"
  
</asp:LinqDataSource>

Criando uma Cláusula Parametrizada Where

Se você desejar comparar um valor da propriedade com um valor que é conhecido somente no tempo de execução, você define um parâmetro na coleção propriedade WhereParameters.Por exemplo, se você desejar filtrar usando um valor que é fornecido pelo usuário, você cria um parâmetro que representa o valor.O controle LinqDataSource cria a cláusula Where com o valor do parâmetro atual.

O exemplo a seguir mostra um controle LinqDataSource que recupera dados com base na seleção do usuário em um controle chamado DropDownList1 .

<asp:DropDownList AutoPostBack="true" ID="DropDownList1" >
  <asp:ListItem Value="Sports">Sports</asp:ListItem>
  <asp:ListItem Value="Garden">Garden</asp:ListItem>
  <asp:ListItem Value="Auto">Auto</asp:ListItem>
</asp:DropDownList>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    AutoGenerateWhereClause="true"
    ID="LinqDataSource1" 
    >
  <WhereParameters>
    <asp:ControlParameter 
      Name="Category" 
      ControlID="DropDownList1" 
      Type="String" />
  </WhereParameters>
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>

O controle LinqDataSource cria automaticamente a cláusula Where quando você define a propriedade AutoGenerateWhereClause como true.Essa opção é útil quando você tiver vários parâmetros, porque você não tem que especificar cada condição na propriedade Where.Em vez disso, você adiciona os parâmetros na coleção de propriedades WhereParameters e o controle LinqDataSource cria uma cláusula Where que inclua cada parâmetro.

Quando você define a propriedade AutoGenerateWhereClause para true, o nome dos parâmetros deve corresponder ao nome das propriedades correspondentes.Por exemplo, para verificar o valor de um parâmetro em relação à propriedade Category, o parâmetro deve ser nomeado Category.Todas as comparações de igualdade; você não pode testar se um valor é maior ou menor que a valor do parâmetro.Quando você especificar mais de um parâmetro na coleção WhereParameters, os parâmetros são vinculados com uma lógica AND.

Se você tiver que verificar inequality ou vincular condições com um OR lógico, você define a propriedade AutoGenerateWhereClause para false.Em seguida, você pode definir as condições na propriedade Where.Você inclui um espaço reservado para a propriedade Where para cada parâmetro.

O exemplo a seguir mostra como testar para inequality quando você filtra os dados.

<asp:DropDownList 
    AutoPostBack="true" 
    ID="DropDownList1" 
    >
  <asp:ListItem Value="0">0</asp:ListItem>
  <asp:ListItem Value="25">25</asp:ListItem>
  <asp:ListItem Value="100">100</asp:ListItem>
  <asp:ListItem Value="400">400</asp:ListItem>
</asp:DropDownList>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Where="Price > @UserPrice"
    ID="LinqDataSource1" 
    >
  <WhereParameters>
    <asp:ControlParameter 
      Name="UserPrice" 
      DefaultValue="0" 
      ControlID="DropDownList1" 
      Type="Int32" />
  </WhereParameters>
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>

Para obter mais informações, consulte AutoGenerateWhereClause.

Agrupamento e Agregar Dados

Você pode agrupar dados para consolidar os dados de registros que tenham valores comuns em uma ou mais colunas.Para isso, definindo a propriedade GroupBy como o nome das propriedades que você deseja usar para consolidar os dados.Por exemplo, para agrupar registros com o mesmo valor de cidade de uma tabela que contém informações de endereço, defina GroupBy para City.

Você pode calcular os valores para os dados agrupados, tais como a média ou soma de uma propriedade, utilizando funções agregadas em combinação com a propriedade GroupBy.Recuperar os valores que são usados para agrupamento consultando o objeto Key.

O exemplo a seguir mostra como agrupar os dados em uma propriedade chamada ProductCategory.Os valores agrupados são recuperados, incluindo Key na propriedade Select.O métodos agregados Average e Count também são incluídos na propriedade Select.

<asp:LinqDataSource 
  ContextTypeName="ExampleDataContext" 
  TableName="Products" 
  GroupBy="ProductCategory"
  Select="new(Key, 
    Average(ListPrice) As AverageListPrice, 
    Average(Cost) As AverageCost, 
    Count() As RecordCount)"
  ID="LinqDataSource1" 
  >
</asp:LinqDataSource>

Você pode recuperar os registros individuais que pertencem a um grupo usando a palavra-chave It.Para obter mais informações, consulte Como: agrupar e agregados dados usando o controle LinqDataSource.

Métodos Agregados

A tabela a seguir lista os métodos agreagados que estão disponíveis quando você usa o controle LinqDataSource.

Função Agregada

Descrição

Count()

Retorna o número total de registros de um conjunto de dados.

Average(Coluna)

Retorna o valor médio da coluna especificada para todos os registros retornados.

Sum(Coluna)

Retorna o valor de adicionar todos os valores na coluna especificada para todos os registros retornados.

Max(Coluna)

Retorna o valor médio da coluna especificada para todos os registros retornados.

Min(Coluna)

Retorna o valor médio da coluna especificada para todos os registros retornados.

Where(Condição)

Filtra os registros retornados com base à condição especificada.

Any()

Determina se a coleção contém quaisquer registros.

All(Condição)

Determina se todos os registros na coleção satisfazem a condição especificada.

Atualização, Inserção, e Exclusão de Dados.

Você pode configurar o controle LinqDataSource para criar automaticamente os comandos para atualizar, inserir e excluir dados.Para ativar Atualizações Automáticas dados, defina a propriedade EnableUpdate, EnableInsert, ou EnableDelete como true.

Observação:

Se você desejar que o controle LinqDataSource para gerar automaticamente comandos de atualização, você não pode definir a propriedade Select.Quando a propriedade Select é definida, o controle LinqDataSource retorna um objeto que é uma instância de uma classe dinâmica.Ele é não uma instância da classe que representa a tabela de banco de dados.Portanto, a classe dinâmica não é possível inferir como atualizar os valores de tabela de banco de dados.

Se você desejar definir quaisquer valores para serem atualizadas por meio de programação, você pode criar manipuladores de eventos para os eventos Updating, Inserting, ou Deleting.No manipulador, você pode definir um valor antes que inicie a operação de dados.Para obter mais informações, consulte Como: atualização, Inserir e excluir dados com o controle LinqDataSource.

Classificando Dados

O objeto LinqDataSource suporta duas maneiras para classificar os dados de uma consulta.Você pode classificar os dados por valores estáticos ao desenvolver a página da Web.Você pode também permitir que os usuários classifiquem dinamicamente os dados em tempo de execução.

Para ordenar os dados de acordo com valores estáticos, atribua o nome de uma propriedade para a propriedade OrderBy.Para permitir que os usuários classifiquem os dados em tempo de execução, defina a propriedade AutoSort como true (que é o valor padrão).Em seguida, passe uma expressão de classificação para o controle LinqDataSource.Um controle vinculado a dados como o controle GridView irá passar uma expressão de classificação quando a sua propriedade AllowSorting é definida como true.

Para especificar mais de uma nome da coluna na propriedade OrderBy, separe os nomes com uma vírgula.Por exemplo, se você especificar "Sobrenome, Nome", os registros serão classificados primeiro por LastName e registros que contêm valores correspondentes no campo LastName serão classificados por FirstName.

Você pode usar ambas as direções de classificação quando você deseja fazer primeiro retornar os dados em uma ordem específica e, em seguida, permitir que os usuários alterar essa ordem.Nesse caso, você define a propriedade AutoSort como true e define a propriedade OrderBy com o nome de uma propriedade.

O exemplo a seguir mostra um controle LinqDataSource que primeiramente classifica os registros por LastName, em seguida, FirstName, e, em seguida, MiddleName.O controle LinqDataSource também é configurado para permitir que os usuários classifiquem dinamicamente as linhas.Você pode acoplar um controle de dados como o controle GridView para o controle LinqDataSource para exibir os dados e permitir que os usuários especifiquem uma ordem de classificação.

<asp:LinqDataSource
  ContextTypeName="ExampleDataContext"
  TableName="Contact"
  OrderBy="LastName, FirstName, MiddleName"
  AutoSort="true"
  ID="LinqDataSource1"
  
</asp:LinqDataSource>

Usando Parâmetros Para Avaliar Valores Dinamicamente

Quando você usa o controle LinqDataSource, você usa parâmetros para especificar valores que devem ser interpretados ou convertidos em tempo de execução.Ao contrário usando outros controles da fonte de dados, você não tem que especificar cada valor que seja parte da atualização, inserção ou a operação de exclusão.O controle LinqDataSource automaticamente define os valores e usa LINQ to SQL para gerar os comandos SQL.Você especifica parâmetros somente para fornecer valores padrão ou para converter valores vazios.Você também pode usar WhereParameters e coleções de parâmetro OrderByParameters para ordenar ou filtrar dados com base nos valores em tempo de execução.Para obter mais informações, consulte LINQ to SQL.

O controle LinqDataSource contém as seguintes coleções de parâmetro:

Para obter um exemplo de como usar a coleção WhereParameters para permitir que os usuários filtrem dinamicamente os registros que são retornados de um controle LinqDataSource, consulte Filtragem de Dados com a Cláusula Where anteriormente contidas neste tópico.

Controle de Concorrência

Quando você habilita os usuários para atualizar ou excluir dados, convém certificar-se que os dados de fonte de dados não foram alterados por outro processo antes de continuar com a atualização ou exclusão.Se você não marcar se alterou os valores, você pode, inadvertidamente, substituir valores definidos por outro processo e deixar os dados em um estado inconsistente.

O controle LinqDataSource permite que você determine se os dados foram alterados.O controle armazena os valores de dados originais em estado de exibição na página Web.Quando o página da Web é lançada de volta, a página contém tanto os valores originais e quanto quaisquer valores atualizados.O controle LinqDataSource usa LINQ to SQL para comparar os valores originais com os valores atuais na fonte de dados.Se os valores forem iguais, os dados não foram alterados e LINQ to SQL atualiza ou exclui os dados.Se a dados foram alterados, LINQ to SQL gera uma exceção.

Você pode especificar quais valores de coluna são verificados, definindo a propriedade UpdateCheck de uma coluna na classe entidade manualmente.Quando Designer Relacional de Objetos gera código para um tabela de banco de dados, ele define a propriedade UpdateCheck como Never para colunas que são gerenciadas pelo banco de dados.O valor para qualquer outra coluna está definido como Always, o que significa que ela é sempre incluída em uma verificação de simultaneidade.Defina a propriedade UpdateCheck como Never para impedir que sejam incluídos na verificação de simultaneidade dessa coluna.A configuração da propriedade como Never também evita que valores da coluna que está sendo armazenados no estado da exibição. conjunto o UpdateCheck propriedade para WhenChanged Para verificar o valor em relação à fonte de dados somente quando o usuário tiver alterado o valor.

Se você deve armazenar dados confidenciais em estado de exibição, você deve criptografar o estado de exibição.Para obter mais informações, consulte Criptografar o ViewState no ASP.NET 2.0.

Observação:

Criptografar estado de exibição pode afetar o desempenho de um página Web.

Otimizar Verificação de Simultaneidade para Servidor de Dados SQL

Armazenar muitos valores no estado de exibição pode expandir o tamanho de uma página Web e potencialmente expor dados confidenciais para os usuários.Se você estiver trabalhando com dados de um banco de dados SQL Server, você pode melhorar o desempenho e segurança de uma página da Web criando uma coluna no banco de dados que contém um valor de carimbo de hora.SQL Server automaticamente atualiza uma coluna de carimbo de hora toda vez que o registro é modificado.Nesse caso, o controle LinqDataSource não tem que comparar cada coluna em um registro para determinar se o registro foi alterado.Em vez disso, ele pode comparar apenas o carimbo de hora em estado de exibição com o carimbo de hora no banco de dados.

Se você adicionar uma coluna de carimbo de data/hora em um banco de dados do SQL servidor, a Designer Relacional de Objetos cria automaticamente a classe de entidade para que apenas o carimbo de data/hora é armazenado no estado de exibição. Para obter mais informações, consulte Demonstra Passo a passo: Usando um carimbo de data/hora com o controle LinqDataSource para verificar a integridade dos dados.

Usando Procedimentos Armazenados

Para usar o controle LinqDataSource para recuperar dados de um procedimento armazenado, você cria um manipulador para o evento Selecting.Na manipulador de eventos, você chama o método da classe de dados-contexto que representa a procedimento armazenado.Você então define o resultado do procedimento armazenado para a propriedade Result do objeto LinqDataSourceSelectEventArgs.Se desejar ativar Atualizações Automáticas, inserir e excluir as operações, o tipo retornado do método deve corresponder ao tipo que está especificado na propriedade TableName.

O exemplo a seguir mostra como atribuir a propriedade Result ao objeto que é retornado de um método que representa um procedimento armazenado.

Protected Sub LinqDataSource_Selecting(ByVal sender As Object, _
        ByVal e As LinqDataSourceSelectEventArgs)
    Dim exampleContext As ExampleDataContext = New ExampleDataContext()
    e.Result = exampleContext.GetRegisteredCustomers()
End Sub
protected void LinqDataSource_Selecting(object sender, 
        LinqDataSourceSelectEventArgs e)
{
    ExampleDataContext exampleContext = new ExampleDataContext();
    e.Result = exampleContext.GetRegisteredCustomers();
}

Para obter mais informações sobre como criar métodos de contexto de dados, consulte How to: Create DataContext Methods Mapped to Stored Procedures and Functions (O/R Designer).

Validando Valores ao Modificar Dados

Antes de modificar um registro de dados, talvez seja necessário validar os valores.Normalmente, você inclui verificações de validação na classe de dados e não na página Web.Por centralizar as verificações de validação na classe de dados, certifique-se que a verificação de validação possa ser usada, independentemente de como a classe de dados é usada.Para obter mais informações sobre como adicionar validação para uma classe, consulte How to: Add Validation to Entity Classes e Walkthrough: Adding Validation to Entity Classes.

Exceções de validação são lançadas antes de dados serem atualizados, inseridos ou excluídos.Para recuperar exceções de validação, você pode criar manipuladores para os eventos Inserting, Updating e Deleting.Para obter mais informações, consulte as Classes LinqDataSourceUpdateEventArgs, LinqDataSourceInsertEventArgs e LinqDataSourceDeleteEventArgs.

Eventos de Controle LinqDataSource

O controle LinqDataSource gera eventos em determinados pontos durante o processamento para poder personalizar como dados são selecionados, inseridos, atualizados ou excluídos.

Quando ele seleciona os dados, o controle LinqDataSource gera os seguintes eventos (na ordem):

  1. Selecting

  2. ContextCreating (se necessário)

  3. ContextCreated (se necessário)

  4. Selected

  5. ContextDisposing

Se você criar o objeto de contexto por programação na caixa Evento Selecting e você não tiver que armazenar valores originais no estado de exibição, os eventos ContextCreating e ContextCreated são ignorados.

Quando ele atualiza, insere ou exclui dados, o controle LinqDataSource gera os seguintes eventos (na ordem):

  1. ContextCreating

  2. ContextCreated

  3. Inserting ou Updating, ou Deleting

  4. Inserted ou Updated, ou Deleted

  5. ContextDisposing

A ordem dos eventos de atualização, exclusão e operações de inserção diferem da seleção de operações.Isso ocorre porque o controle LinqDataSource deve obter uma instância de objeto de dados e passar essa instância para os eventos Inserting, Updating, ou Deleting.

Os eventos Selecting, Inserting, Updating, e Deleting são aumentados antes que a operação de dados seja executada.Criar manipuladores de eventos para esses eventos para validar e modificar os valores antes de operação, ou cancelar a operação.Por exemplo, se o banco de dados contiver uma coluna que armazena um registro modificado pelo usuário, você pode usar o evento Updating para definir o valor nome de usuário por meio de programação.

Os eventos Selected, Inserted, Updated, e Deleted são disparados após a conclusão da operação.Crie manipuladores de eventos para esses eventos para capturar exceções e examinar os valores que são retornados da operação.

O evento ContextCreating é gerado antes do controle LinqDataSource criar o tipo especificado na propriedade ContextTypeName.Você manipula este evento se você deseja criar o tipo de contexto por meio de programação.Por exemplo, você pode fazer isso se o método de construtor do tipo de contexto requiser parâmetros.O evento ContextCreated é gerado após o tipo especificado na propriedade ContextTypeName ser criado.Você manipula esse evento para capturar exceções ou para examinar o objeto de contexto que foi criado.O evento ContextDisposing é disparado antes do controle LinqDataSource criar o tipo especificado na propriedade ContextTypeName.Você manipula esse evento para cancelar a disposição de um objeto que é muito dispendioso criar (no tempo ou em recursos).Você também pode usar o evento para executar limpeza que é específica para o objeto antes de objeto ser destruído.

Voltar ao topo

Exemplos de código

Passo-a-passo: recuperação, atualização, inserção e exclusão de dados com o LinqDataSource e controles DetailsView

Demonstra Passo a passo: Selecionando e filtragem de um subconjunto de dados com os controles GridView e LinqDataSource

Demonstra Passo a passo: Usando um carimbo de data/hora com o controle LinqDataSource para verificar a integridade dos dados

Como: agrupar e agregados dados usando o controle LinqDataSource

Como: atualização, Inserir e excluir dados com o controle LinqDataSource

Voltar ao topo

Referência de Classe

A tabela seguinte lista as classes chave que estão relacionados à classe LinqDataSource.

Membro

Descrição

LinqDataSource

Aplica expressões LINQ para um fonte de dados e representa os dados para os controles vinculados a dados.

LinqDataSourceView

Suporta o controle LinqDataSource e fornece uma interface para controles vinculados a dados para executar operações de dados com objetos de dados.Essa classe é destinada principalmente para uso pelos controles vinculados a dados e não como um objeto programável no código da página.

LinqDataSourceDisposeEventArgs

Fornece dados para o ContextDisposing evento.

LinqDataSourceContextEventArgs

Fornece dados para o ContextCreating evento.

LinqDataSourceDeleteEventArgs

Fornece dados para o Deleting evento.

LinqDataSourceInsertEventArgs

Fornece dados para o Inserting evento.

LinqDataSourceSelectEventArgs

Fornece dados para o Selecting evento.

LinqDataSourceStatusEventArgs

Fornece dados para os eventos ContextCreated, Deleted, Inserted, Selected e Updated.

LinqDataSourceUpdateEventArgs

Fornece dados para o Updating evento.

Voltar ao topo

Consulte também

Outros recursos

Language-Integrated Query (LINQ)

LINQ to SQL

Object Relational Designer (O/R Designer)