ASP.NET implantação da Web usando o Visual Studio: implantando uma atualização de banco de dados
por Tom Dykstra
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
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çavar 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") } };
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.
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, noUp
método , você poderá ver o código que cria a nova coluna. OUp
método cria a coluna quando você está implementando a alteração e oDown
método exclui a coluna quando você está revertendo a alteração.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 oSeed
método .
Exibir a nova coluna na página Instrutores
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.)
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.
Feche o navegador.
Implantar a atualização do banco de dados
Em Gerenciador de Soluções selecione o projeto ContosoUniversity.
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.
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.Na barra de ferramentas Publicar do Web One Click , clique no perfil De publicação de preparo e clique em Publicar Web.
Execute a página Instrutores no preparo para verificar se a atualização foi implantada com êxito.
Na barra de ferramentas Publicar do Web One Click , clique no Perfil de publicação de produção e clique em Publicar Web.
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
No Visual Studio, abra SQL Server Pesquisador de Objetos.
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.
Clique com o botão direito do mouse na tabela Usuários e clique em Exibir Designer.
No designer, adicione uma coluna Comentários e torne-a nvarchar(128) e anulável e clique em Atualizar.
Na caixa Visualizar Banco de Dados Atualizações, clique em Atualizar Banco de Dados.
Criar uma página para exibir e editar a nova coluna
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.
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.
Copie a seguinte marcação para o
MainContent
Content
elemento (o último dos trêsContent
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>
Clique com o botão direito do mouse na página UserInfo.aspx e clique em Exibir no Navegador.
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.
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.
Abra o assistente Publicar Web clicando com o botão direito do mouse no projeto ContosoUniversity e clicando em Publicar.
Selecione o Perfil de teste .
Clique na guia Configurações .
Em DefaultConnection, selecioneAtualizar banco de dados.
Desabilite os scripts adicionais que você configurou para executar para a implantação inicial:
- Clique em Configurar atualizações de banco de dados.
- 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.
- Clique em fechar
Clique na guia Visualização .
Em Bancos de Dados e à direita de DefaultConnection, clique no link Visualizar 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.
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.
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.
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.
O próximo tutorial mostra como executar implantações usando a linha de comando.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de