ASP.NET implantação da Web usando o Visual Studio: implantando uma atualização de banco de dados

por Tom Dykstra

Baixar o Projeto Inicial

Esta série de tutoriais mostra como implantar (publicar) um aplicativo Web ASP.NET em Serviço de Aplicativo do Azure Aplicativos Web ou em um provedor de hospedagem de terceiros, usando o Visual Studio 2012 ou o Visual Studio 2010. Para obter informações sobre a série, consulte o primeiro tutorial da série.

Visão geral

Neste tutorial, você faz uma alteração de banco de dados e alterações de código relacionadas, testa as alterações no Visual Studio e implanta a atualização nos ambientes de teste, preparo e produção.

O tutorial mostra primeiro como atualizar um banco de dados gerenciado por Migrações do Code First e, em seguida, mostra como atualizar um banco de dados usando o provedor dbDacFx.

Lembrete: se você receber uma mensagem de erro ou algo não funcionar durante o tutorial, marcar página de solução de problemas.

Implantar uma atualização de banco de dados usando Migrações do Code First

Nesta seção, você adicionará uma coluna de data de nascimento à Person classe base para as Student entidades e Instructor . Em seguida, atualize a página que exibe os dados do instrutor para que ela exiba a nova coluna. Por fim, você implanta as alterações em teste, preparo e produção.

Adicionar uma coluna a uma tabela no banco de dados do aplicativo

  1. No projeto ContosoUniversity.DAL , abra Person.cs e adicione a seguinte propriedade no final da Person classe (deve haver duas chaves de fechamento após ela):

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    [Display(Name = "Birth Date")]
    public DateTime? BirthDate { get; set; }
    

    Em seguida, atualize o Seed método para que ele forneça um valor para a nova coluna. Abra Migrations\Configuration.cs e substitua o bloco de código que começa var instructors = new List<Instructor> com o seguinte bloco de código, que inclui informações de data de nascimento:

    var instructors = new List<Instructor>
    {
        new Instructor { FirstMidName = "Kim",     LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
        new Instructor { FirstMidName = "Fadi",    LastName = "Fakhouri",    HireDate = DateTime.Parse("2002-07-06"), BirthDate = DateTime.Parse("1960-03-15"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
        new Instructor { FirstMidName = "Roger",   LastName = "Harui",       HireDate = DateTime.Parse("1998-07-01"), BirthDate = DateTime.Parse("1970-01-11"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
        new Instructor { FirstMidName = "Candace", LastName = "Kapoor",      HireDate = DateTime.Parse("2001-01-15"), BirthDate = DateTime.Parse("1975-04-11") },
        new Instructor { FirstMidName = "Roger",   LastName = "Zheng",       HireDate = DateTime.Parse("2004-02-12"), BirthDate = DateTime.Parse("1957-10-12") }
    };
    
  2. Crie a solução e abra a janela Console do Gerenciador de Pacotes . Verifique se ContosoUniversity.DAL ainda está selecionado como o projeto Padrão.

  3. Na janela Console do Gerenciador de Pacotes , selecione ContosoUniversity.DAL como o projeto Padrão e, em seguida, insira o seguinte comando:

    add-migration AddBirthDate
    

    Quando esse comando for concluído, o Visual Studio abrirá o arquivo de classe que define a nova DbMigration classe e, no Up método , você poderá ver o código que cria a nova coluna. O Up método cria a coluna quando você está implementando a alteração e o Down método exclui a coluna quando você está revertendo a alteração.

    AddBirthDate_migration_code

  4. Crie a solução e insira o seguinte comando na janela Console do Gerenciador de Pacotes (verifique se o projeto ContosoUniversity.DAL ainda está selecionado):

    update-database
    

    O Entity Framework executa o Up método e executa o Seed método .

Exibir a nova coluna na página Instrutores

  1. No projeto ContosoUniversity, abra Instructors.aspx e adicione um novo campo de modelo para exibir a data de nascimento. Adicione-o entre os para a data de contratação e a atribuição do escritório:

    <asp:TemplateField HeaderText="Hire Date" SortExpression="HireDate">
        <ItemTemplate>
            <asp:Label ID="InstructorHireDateLabel" runat="server" Text='<%# Eval("HireDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorHireDateTextBox" runat="server" Text='<%# Bind("HireDate", "{0:d}") %>' Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Birth Date" SortExpression="BirthDate">
        <ItemTemplate>
            <asp:Label ID="InstructorBirthDateLabel" runat="server" Text='<%# Eval("BirthDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorBirthDateTextBox" runat="server" Text='<%# Bind("BirthDate", "{0:d}") %>'
                Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Office Assignment" SortExpression="OfficeAssignment.Location">
        <ItemTemplate>
            <asp:Label ID="InstructorOfficeLabel" runat="server" Text='<%# Eval("OfficeAssignment.Location") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorOfficeTextBox" runat="server"
                Text='<%# Eval("OfficeAssignment.Location") %>' Width="7em"
                OnInit="InstructorOfficeTextBox_Init"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    

    (Se o recuo de código ficar fora de sincronia, você poderá pressionar CTRL-K e, em seguida, CTRL-D para reformatar automaticamente o arquivo.)

  2. Execute o aplicativo e clique no link Instrutores .

    Quando a página é carregada, você vê que ela tem o novo campo de data de nascimento.

    Captura de tela da página Instrutores mostrando seu Nome, Data de Contratação, Data de Nascimento e Atribuição do Office.

  3. Feche o navegador.

Implantar a atualização do banco de dados

  1. Em Gerenciador de Soluções selecione o projeto ContosoUniversity.

  2. Na barra de ferramentas Publicar do Web One Click , clique no perfil De publicação de teste e, em seguida, clique em Publicar Web. (Se a barra de ferramentas estiver desabilitada, selecione o projeto ContosoUniversity no Gerenciador de Soluções.)

    O Visual Studio implanta o aplicativo atualizado e o navegador é aberto na home page.

  3. Execute a página Instrutores para verificar se a atualização foi implantada com êxito.

    Quando o aplicativo tenta acessar o banco de dados desta página, o Code First atualiza o esquema de banco de dados e executa o Seed método . Quando a página é exibida, você vê a coluna Data de Nascimento esperada com datas nela.

  4. Na barra de ferramentas Publicar do Web One Click , clique no perfil De publicação de preparo e clique em Publicar Web.

  5. Execute a página Instrutores no preparo para verificar se a atualização foi implantada com êxito.

  6. Na barra de ferramentas Publicar do Web One Click , clique no Perfil de publicação de produção e clique em Publicar Web.

  7. Execute a página Instrutores em produção para verificar se a atualização foi implantada com êxito.

    Para uma atualização real do aplicativo de produção que inclui uma alteração de banco de dados, você também normalmente deixaria o aplicativo offline durante a implantação usando app_offline.htm, como você viu no tutorial anterior.

Implantar uma atualização de banco de dados usando o provedor dbDacFx

Nesta seção, você adicionará uma coluna Comentários à tabela Usuário no banco de dados de associação e criará uma página que permite exibir e editar comentários para cada usuário. Em seguida, você implanta as alterações para testar, preparar e produção.

Adicionar uma coluna a uma tabela no banco de dados de associação

  1. No Visual Studio, abra SQL Server Pesquisador de Objetos.

  2. Expanda (localdb)\v11.0, expanda Bancos de Dados, expanda aspnet-ContosoUniversity (não aspnet-ContosoUniversity-Prod) e expanda Tabelas.

    Se você não vir (localdb)\v11.0 no nó SQL Server, clique com o botão direito do mouse no nó SQL Server e clique em Adicionar SQL Server. Na caixa de diálogo Conectar ao Servidor , insira (localdb)\v11.0 como o Nome do servidor e clique em Conectar.

    Se você não vir aspnet-ContosoUniversity, execute o projeto e faça logon usando as credenciais de administrador (a senha é devpwd) e atualize a janela SQL Server Pesquisador de Objetos.

  3. Clique com o botão direito do mouse na tabela Usuários e clique em Exibir Designer.

    Exibição SSOX Designer

  4. No designer, adicione uma coluna Comentários e torne-a nvarchar(128) e anulável e clique em Atualizar.

    Adicionando a coluna Comentários

  5. Na caixa Visualizar Banco de Dados Atualizações, clique em Atualizar Banco de Dados.

    Visualizar Atualizações de Banco de Dados

Criar uma página para exibir e editar a nova coluna

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse na pasta Conta no projeto ContosoUniversity, clique em Adicionar e em Novo Item.

  2. Crie um formulário da Web usando a página mestra e nomeie-o como UserInfo.aspx. Aceite o arquivo Site.Master padrão como a página master.

  3. Copie a seguinte marcação para o MainContentContent elemento (o último dos três Content elementos):

    <h2>User Information</h2>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
            SelectCommand="SELECT UserId, UserName, Comments FROM [Users]" 
            UpdateCommand="UPDATE [Users] SET [UserName] = @UserName, [Comments] = @Comments WHERE [UserId] = @UserId">
            <DeleteParameters>
                <asp:Parameter Name="UserId" Type="Object" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="UserId" Type="Object" />
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="Comments" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="UserId" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
                <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments" />
            </Columns>
        </asp:GridView>
    
  4. Clique com o botão direito do mouse na página UserInfo.aspx e clique em Exibir no Navegador.

  5. Faça logon com suas credenciais de usuário administrador (a senha é devpwd) e adicione alguns comentários a um usuário para verificar se a página funciona corretamente.

    Captura de tela mostrando a página UserInfo exibindo o teste UserName e a conta de teste do Comentário Tom.

  6. Feche o navegador.

Implantar a atualização do banco de dados

Para implantar usando o provedor dbDacFx, basta selecionar a opção Atualizar banco de dados no perfil de publicação. No entanto, para a implantação inicial quando você usou essa opção, você também configurou alguns scripts SQL adicionais para execução: eles ainda estão no perfil e você precisará impedi-los de serem executados novamente.

  1. Abra o assistente Publicar Web clicando com o botão direito do mouse no projeto ContosoUniversity e clicando em Publicar.

  2. Selecione o Perfil de teste .

  3. Clique na guia Configurações .

  4. Em DefaultConnection, selecioneAtualizar banco de dados.

  5. Desabilite os scripts adicionais que você configurou para executar para a implantação inicial:

    1. Clique em Configurar atualizações de banco de dados.
    2. Na caixa de diálogo Configurar banco de dados Atualizações, desmarque as caixas de marcar ao lado de Grant.sql e aspnet-data-dev.sql.
    3. Clique em fechar
  6. Clique na guia Visualização .

  7. Em Bancos de Dados e à direita de DefaultConnection, clique no link Visualizar banco de dados .

    Visualização do Banco de Dados

    A janela de visualização mostra o script que será executado no banco de dados de destino para fazer com que esse esquema de banco de dados corresponda ao esquema do banco de dados de origem. O script inclui um comando ALTER TABLE que adiciona a nova coluna.

  8. Feche a caixa de diálogo Visualização do Banco de Dados e clique em Publicar.

    O Visual Studio implanta o aplicativo atualizado e o navegador é aberto na home page.

  9. Execute a página UserInfo (adicione Account/UserInfo.aspx à URL da home page) para verificar se a atualização foi implantada com êxito. Você precisará fazer logon inserindo admin e devpwd.

    Os dados em tabelas não são implantados por padrão e você não configurou um script de implantação de dados para execução, portanto, não encontrará o comentário que adicionou no desenvolvimento. Você pode adicionar um novo comentário agora no preparo para verificar se a alteração foi implantada no banco de dados e se a página funciona corretamente.

  10. Siga o mesmo procedimento para implantar no preparo e na produção.

    Não se esqueça de desabilitar os scripts extras. A única diferença em comparação com o perfil de Teste é que você desabilitará apenas um script nos perfis de Preparo e Produção porque eles foram configurados para executar apenas aspnet-prod-data.sql.

    As credenciais para preparo e produção são admin e prodpwd.

    Para uma atualização real do aplicativo de produção que inclui uma alteração de banco de dados, você também normalmente deixaria o aplicativo offline durante a implantação carregando app_offline.htm antes de publicá-lo e excluí-lo posteriormente, como você viu no tutorial anterior.

Resumo

Agora você implantou uma atualização de aplicativo que incluiu uma alteração de banco de dados usando Migrações do Code First e o provedor dbDacFx.

Captura de tela mostrando a página Instrutores exibindo seu Nome, Data de Contratação, Data de Nascimento e Atribuição do Office.

Captura de tela da página UserInfo mostrando o teste UserName e a conta de teste do Comentário Tom.

O próximo tutorial mostra como executar implantações usando a linha de comando.