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

Nessa explicação passo a passo, você aprenderá como usar um carimbo de data / hora para verificar conflitos de dados quando você atualiza dados usando um controle LinqDataSource.O controle LinqDataSource armazena o valor de carimbo de hora na página da Web.Quando o usuário atualiza ou exclui dados, o controle LinqDataSource verifica o valor de carimbo de data / hora com relação ao valor de carimbo de hora atual no banco de dados.Se o controle LinqDataSource detectar que o valor na coluna de carimbo de hora foi alterado, o controle não atualizar ou excluir o registro.Nesse caso, o registro foi alterado por outro processo.Em vez disso, o controle LinqDataSource gera uma exceção que indica que o registro foi alterado.

Uma coluna de carimbo de data / hora é automaticamente atualizada pelo SQL Server toda vez que o registro é modificado.Para obter mais informações, consulte Carimbo de data/hora (Transact-SQL).Na classe de entidade, uma coluna de carimbo de data / hora é marcada por ter a propriedade IsVersion definida como true.

Se você não usar uma coluna de carimbo de hora, o controle LinqDataSource verifica a simultaneidade de dados armazenando valores na página da Web.Valores de simultaneidade consistem de colunas que são usados como chave primária na tabela, ou que são marcados com UpdateCheck.Always ou UpdateCheck.WhenUpdated na propriedade UpdateCheck do atributo ColumnAttribute.LINQ to SQL verifica esses valores em relação ao banco de dados antes de atualizar ou excluir os dados.Essa abordagem pode criar um grande página da Web se o registro de dados contém várias colunas ou valores grandes da coluna.Isso também pode representar um risco de segurança se o registro contiver dados que você não deseja expor na página.

Você irá usar o Object Relational Designer para criar a classe que representa a tabela do banco de dados.O controle LinqDataSource vai interagir com essa classe criada para recuperar, atualizar, inserir e excluir os dados.

Pré-requisitos

Para implementar os procedimentos no seu próprio ambiente de desenvolvimento você precisa:

  • Visual Web Developer Express Edition ou Visual Studio 2008.

  • SQL Server Express Edition instalado em seu computador.Se você possui o SQL Server instalado, você pode usá-lo, mas deve fazer pequenos ajustes em alguns procedimentos.

  • Uma página Web ASP.NET.

Criando uma tabela de banco de dados

Para executar as etapas nessa explicação passo a passo, você deve ter um tabela de banco de dados que contenha uma coluna de carimbo de data/hora.Se você ainda não tiver uma tabela como essa, você pode criar uma seguindo as etapas no procedimento a seguir.Se você usar uma tabela que já existe, os passos em alguns dos procedimentos não vão coincidir exatamente com seu banco de dados.No entanto, os conceitos ilustrados nesse passo a passo serão os mesmos.

Para criar um tabela no banco de dados com uma coluna de carimbo de data/hora

  1. Se a página Web ainda não possui uma pasta App_Data, em Gerenciador de Soluções, clique com o botão direito no projeto, clique em Adicionar Pasta ASP.NET, e então clique em App_Data.

  2. Clique com o botão direito na pasta App_Data e então clique em Adicionar Novo Item.

  3. Em Modelos Instalados , selecione banco de dados SQL, altere o nome do arquivo para Reviews.mdf e em seguida, clique em Adicionar .

  4. Em Gerenciador de Servidores, abra o nó Reviews.mdf e em seguida, clique com o botão direito na pasta Tabelas.

  5. Clique em Adicionar Nova Tabela.

  6. Crie as seguintes colunas na tabela:

    Nome da coluna

    Tipo de dados

    Propriedades

    BookID

    int

    IsIdentity = Sim

    Não nulo

    Chave primária

    Title

    nvarchar(50)

    Author

    nvarchar(50)

    RecommendToBookGroup

    bit

    Não nulo

    Revisão

    nvarchar(1000)

    Timestamp

    Carimbo data/hora

    Não nulo

  7. Salvar a tabela e nomeá-la- BookReviews.

  8. Adicione vários registros à tabela BookReviews com amostra de dados.

    No Gerenciador de Soluções, clique com o botão direito do mouse na tabela BookReviews e clique em Mostrar Dados da Tabela.Você não precisa especificar um valor de carimbo de data/hora ou BookID porque esses valores são gerados pelo banco de dados.

Criando classes para representar entidades do banco de dados

Para trabalhar com o controle LinqDataSource, você trabalha com classes que representam entidades de banco de dados.Você pode usar uma ferramenta no Visual Web Developer Express Edition ou Visual Studio 2008 para criar essas classes.

Criando uma classe para a tabela BookReviews

  1. Se a página web ainda não possui uma pasta App_Code, no Gerenciador de Soluções, clique com o botão direito no projeto, clique Adicionar Pasta ASP.NET, e então clique em App_Code.

  2. Clique com o botão direito do mouse na pasta App_Code e então clique em Adicionar Novo Item

  3. Em Modelos Instalados, selecione Link para classes SQL, renomeie o arquivo Reviews.dbml e em seguida, clique em Adicionar.

    A janela Object Relational Designer é exibida.

  4. No Gerenciado de Servidores, arraste a tabela BooksReviews para a janela Object Relational Designer.

    A tabela BookReviews e suas colunas são representadas na janela do designer como uma entidade chamada BookReview.

  5. Salve o arquivo Reviews.dbml.

  6. No Gerenciador de Soluções, abra o arquivo Reviews.designer.cs ou Reviews.designer.vb.

    A entidade agora possui classes chamadas ReviewsDataContext e BookReview.Os atributos de coluna para todas as colunas são marcados com UpdateCheck=UpdateCheck.Never.No entanto, o atributo de coluna para a coluna de carimbo de data/hora é marcado com IsVersion=true.

  7. Feche o arquivo Reviews.dbml.

Criando e configurando um Controle LinqDataSource

Agora você tem um tabela de banco de dados e as classes que representam entidades de banco de dados.Você pode usar um controle LinqDataSource em um página da Web o ASP.NET para gerenciar os dados para exibir e atualizar.

Criando e configurando um Controle LinqDataSource

  1. Em Visual Studio, crie uma nova página Web ASP.NET e alternar para Modo de exibição Source.

  2. Na guia Dados da Caixa de Ferramentas, arraste um controle LinqDataSource e solte-o dentro do elemento form da página web.

    Você pode deixar a propriedade como LinqDataSource1.

  3. Defina a propriedade ContextTypeName para ReviewsDataContext.

  4. Defina a propriedade TableName como BookReviews.

  5. Definir as propriedades EnableUpdate e EnableDelete para true.

    O exemplo a seguir mostra o código declarativo para o controle LinqDataSource.

    <asp:LinqDataSource 
      ContextTypeName="ReviewsDataContext" 
      TableName="BookReviews" 
      EnableUpdate="true" 
      EnableDelete="true" 
      ID="LinqDataSource1" 
      >
    </asp:LinqDataSource>
    

Adicionar um controle para exibir e atualizar dados

Agora você pode adicionar um controle DetailsView e ligá-lo ao controle LinqDataSource.O controle DetailsView permite que os usuários exibam e atualizem os dados que são gerenciados pelo controle LinqDataSource.

Para vincular um controle DetailsView com os dados do controle LinqDataSource

  1. Na guia Dados da Caixa de Ferramentas, clique duas vezes no controle DetailsView para adicioná-lo à página.

    Você pode deixar a propriedade ID como DetailsView1.

  2. Defina a propriedade DataSourceID como LinqDataSource1 .

  3. Defina a propriedade DataKeyNames como BookID.

    Você deve definir a propriedade DataKeyNames se você desejar usar o controle DetailsView para atualizar ou excluir dados.

  4. Defina a propriedade AllowPaging como true.

  5. Definir as propriedades AutoGenerateEditButton e AutoGenerateDeleteButton para true.

    O exemplo a seguir mostra a marcação declarativa.

    <asp:DetailsView 
      DataSourceID="LinqDataSource1" 
      DataKeyNames="BookID" 
      AutoGenerateEditButton="true"
      AutoGenerateDeleteButton="true"
      AllowPaging="true" 
      ID="DetailsView1" 
      >
    </asp:DetailsView>
    

    No banco de dados BookReviews, as colunas BookID e carimbo de data/hora são automaticamente definidas pelo banco de dados.Os usuários não podem alterar seus valores.

  6. Salve suas alterações.

  7. Pressione CTRL+F5 para exibir a página no navegador.

    O controle DetailsView exibe as colunas para o registro atual da tabela BookReviews.

  8. Feche o navegador.

Verificando Conflitos de Dados

Para ver como a coluna de carimbo data/hora impede atualizações quando os dados forem alterados, você pode executar um teste.Você irá selecionar um registro para atualização em um página da Web, mas altere esse mesmo registro fora da página da Web.Quando você envia a atualização por meio de página da Web, o controle LinqDataSource bloqueará a atualização.

Para testar a integridade dos dados

  1. Pressione CTRL+F5 para exibir a página no navegador.

  2. Selecione um registro e em seguida, clique no link Editar.Não atualize o registro ainda.

  3. No Gerenciador de Soluções, clique com o botão direito do mouse na tabela BookReviews e clique em Mostrar Dados da Tabela.

  4. Altere um valor no mesmo registro você abriu no navegador da Web.

  5. Feche a janela para gravar a alteração para o banco de dados.

    Quando a alteração é salva, a coluna de carimbo de data/hora para o registro é atualizada automaticamente pelo SQL Server.

  6. No navegador da Web, altere um valor no registro para atualizar.

  7. Clique no link Atualizar.

    Você verá um mensagem de erro que declara que a linha foi alterado.O carimbo de data/hora salvo na página não coincide com o carimbo de data/hora no registro do banco de dados.

    Se você desejar executar uma ação quando esse erro é exibido, você pode criar um manipulador para o evento Updating.

Próximas etapas

Essa explicação passo a passo, você viu como otimizar verificações de integridade de dados quando você usa o controle LinqDataSource.Você pode tirar proveito adicional dos recursos do LinqDataSource nos seguintes aspectos:

Consulte também

Conceitos

Visão geral sobre o controle de servidor Web LinqDataSource

Referência

LinqDataSource