Веб-развертывание ASP.NET с помощью Visual Studio: развертывание обновления базы данныхASP.NET Web Deployment using Visual Studio: Deploying a Database Update

от Tom Dykstra)by Tom Dykstra

Скачать начальный проектDownload Starter Project

В этой серии руководств показано, как развернуть (опубликовать) веб-приложение ASP.NET в веб-приложениях службы приложений Azure или поставщике услуг размещения стороннего поставщика с помощью Visual Studio 2012 или Visual Studio 2010.This tutorial series shows you how to deploy (publish) an ASP.NET web application to Azure App Service Web Apps or to a third-party hosting provider, by using Visual Studio 2012 or Visual Studio 2010. Сведения о ряде см. в первом руководстве по ряду.For information about the series, see the first tutorial in the series.

ОбзорOverview

В этом руководстве вы вносите изменения в базу данных и связанную с ней изменения кода, тестируете изменения в Visual Studio, а затем развертываете обновление в тестовой, промежуточной и рабочей средах.In this tutorial, you make a database change and related code changes, test the changes in Visual Studio, then deploy the update to the test, staging, and production environments.

Сначала в руководстве показано, как обновить базу данных, управляемую с помощью Code First Migrations, а затем в дальнейшем будет показано, как обновить базу данных с помощью поставщика Дбдакфкс.The tutorial first shows how to update a database that is managed by Code First Migrations, and then later it shows how to update a database by using the dbDacFx provider.

Напоминание. Если вы получаете сообщение об ошибке или что-то не работает при работе с этим руководством, обязательно ознакомьтесь со страницей устранения неполадок.Reminder: If you get an error message or something doesn't work as you go through the tutorial, be sure to check the troubleshooting page.

Развертывание обновления базы данных с помощью Code First MigrationsDeploy a database update by using Code First Migrations

В этом разделе вы добавите столбец даты рождения в базовый класс Person для сущностей Student и Instructor.In this section, you add a birth date column to the Person base class for the Student and Instructor entities. Затем вы обновите страницу, на которой отображаются данные о преподавателе, чтобы отобразить новый столбец.Then you update the page that displays instructor data so that it displays the new column. Наконец, вы развертываете изменения для тестирования, промежуточного хранения и рабочей среды.Finally, you deploy the changes to test, staging, and production.

Добавление столбца в таблицу в базе данных приложенияAdd a column to a table in the application database

  1. В проекте ContosoUniversity. DAL откройте Person.CS и добавьте следующее свойство в конце класса Person (после него должны быть две закрывающие фигурные скобки):In the ContosoUniversity.DAL project, open Person.cs and add the following property at the end of the Person class (there should be two closing curly braces following it):

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

    Затем обновите метод Seed таким образом, чтобы он выдает значение для нового столбца.Next, update the Seed method so that it provides a value for the new column. Откройте Migrations\Configuration.CS и замените блок кода, который начинается var instructors = new List<Instructor>, на следующий блок кода, содержащий сведения о дате рождения:Open Migrations\Configuration.cs and replace the code block that begins var instructors = new List<Instructor> with the following code block which includes birth date information:

    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. Выполните сборку решения, а затем откройте окно консоли диспетчера пакетов .Build the solution, and then open the Package Manager Console window. Убедитесь, что ContosoUniversity. DAL по-прежнему выбран в качестве проекта по умолчанию.Make sure that ContosoUniversity.DAL is still selected as the Default project.

  3. В окне консоли диспетчера пакетов выберите ContosoUniversity. DAL в качестве проекта по умолчанию, а затем введите следующую команду:In the Package Manager Console window, select ContosoUniversity.DAL as the Default project, and then enter the following command:

    add-migration AddBirthDate
    

    По завершении этой команды Visual Studio открывает файл класса, который определяет новый класс DbMigration, а в методе Up можно увидеть код, создающий новый столбец.When this command finishes, Visual Studio opens the class file that defines the new DbMigration class, and in the Up method you can see the code that creates the new column. Метод Up создает столбец при реализации изменения, а метод Down удаляет столбец при откате изменения.The Up method creates the column when you are implementing the change, and the Down method deletes the column when you are rolling back the change.

    AddBirthDate_migration_code

  4. Выполните сборку решения, а затем введите следующую команду в окне консоли диспетчера пакетов (убедитесь, что проект CONTOSOUNIVERSITY. DAL по-прежнему выбран):Build the solution, and then enter the following command in the Package Manager Console window (make sure the ContosoUniversity.DAL project is still selected):

    update-database
    

    Entity Framework выполняет метод Up, а затем выполняет метод Seed.The Entity Framework runs the Up method and then runs the Seed method.

Отображение нового столбца на странице инструкторовDisplay the new column in the Instructors page

  1. В проекте ContosoUniversity откройте инструкторы. aspx и добавьте новое поле шаблона, чтобы отобразить дату рождения.In the ContosoUniversity project, open Instructors.aspx and add a new template field to display the birth date. Добавьте его между ними для даты найма и назначения Office:Add it between the ones for hire date and office assignment:

    <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>
    

    (Если отступы кода не синхронизированы, можно нажать сочетание клавиш CTRL-K и CTRL-D, чтобы автоматически переформатировать файл.)(If code indentation gets out of sync, you can press CTRL-K and then CTRL-D to automatically reformat the file.)

  2. Запустите приложение и щелкните ссылку инструкторы .Run the application and click the Instructors link.

    Когда страница загрузится, вы увидите, что в ней есть новое поле даты рождения.When the page loads, you see that it has the new birth date field.

    Страница инструкторов с ДеньРождения

  3. Закройте браузер.Close the browser.

Развертывание обновления базы данныхDeploy the database update

  1. В Обозреватель решений выберите проект ContosoUniversity.In Solution Explorer select the ContosoUniversity project.

  2. На панели инструментов веб-публикация одним щелчком выберите профиль тестовой публикации и щелкните Опубликовать веб-сайт.In the Web One Click Publish toolbar, click the Test publish profile, and then click Publish Web. (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)(If the toolbar is disabled, select the ContosoUniversity project in Solution Explorer.)

    Visual Studio развертывает обновленное приложение, и браузер открывается на домашней странице.Visual Studio deploys the updated application, and the browser opens to the home page.

  3. Запустите страницу инструкторы , чтобы убедиться, что обновление успешно развернуто.Run the Instructors page to verify that the update was successfully deployed.

    Когда приложение пытается получить доступ к базе данных для этой страницы, Code First обновляет схему базы данных и выполняет метод Seed.When the application tries to access the database for this page, Code First updates the database schema and runs the Seed method. При отображении страницы отображается столбец ожидаемая Дата рождения с датами в нем.When the page displays, you see the expected Birth Date column with dates in it.

  4. На панели инструментов веб-публикация одним щелчком выберите профиль промежуточной публикации, а затем щелкните Опубликовать веб-сайт.In the Web One Click Publish toolbar, click the Staging publish profile, and then click Publish Web.

  5. Запустите страницу инструкторов в промежуточной среде, чтобы убедиться, что обновление успешно развернуто.Run the Instructors page in staging to verify that the update was successfully deployed.

  6. На панели инструментов веб-публикация одним щелчком выберите профиль рабочей публикации и нажмите кнопку Опубликовать веб-сайт.In the Web One Click Publish toolbar, click the Production publish profile, and then click Publish Web.

  7. Запустите страницу инструкторов в рабочей среде, чтобы убедиться, что обновление успешно развернуто.Run the Instructors page in production to verify that the update was successfully deployed.

    Для реального обновления производственного приложения, включающего изменение базы данных, обычно приложение переводится в автономный режим во время развертывания с помощью приложения_автономно. htm, как было показано в предыдущем руководстве.For a real production application update that includes a database change you would also typically take the application offline during deployment by using app_offline.htm, as you saw in the previous tutorial.

Развертывание обновления базы данных с помощью поставщика ДбдакфксDeploy a database update by using the dbDacFx provider

В этом разделе вы добавите столбец комментариев в пользовательскую таблицу в базе данных членства и создадите страницу, позволяющую отображать и редактировать комментарии для каждого пользователя.In this section, you add a Comments column to the User table in the membership database and create a page that lets you display and edit comments for each user. Затем вы развертываете изменения для тестирования, промежуточного хранения и рабочей среды.Then you deploy the changes to test, staging, and production.

Добавление столбца в таблицу в базе данных членстваAdd a column to a table in the membership database

  1. В Visual Studio откройте Обозреватель объектов SQL Server.In Visual Studio, open SQL Server Object Explorer.

  2. Разверните узел (LocalDB) \v11.0, разверните узел базы данных, разверните узел ASPNET-ContosoUniversity (не ASPNET-ContosoUniversity-произв.), а затем разверните узел таблицы.Expand (localdb)\v11.0, expand Databases, expand aspnet-ContosoUniversity (not aspnet-ContosoUniversity-Prod) and then expand Tables.

    Если вы не видите (LocalDB) \v11.0 в узле SQL Server , щелкните правой кнопкой мыши узел SQL Server и выберите команду Добавить SQL Server.If you don't see (localdb)\v11.0 under the SQL Server node, right-click the SQL Server node and click Add SQL Server. В диалоговом окне соединение с сервером введите (LocalDB) \v11.0 в качестве имени сервераи нажмите кнопку подключить.In the Connect to Server dialog box enter (localdb)\v11.0 as the Server name, and then click Connect.

    Если вы не видите элемент ASPNET-ContosoUniversity, запустите проект и войдите в систему, используя учетные данные администратора (пароль — девпвд), а затем обновите окно Обозреватель объектов SQL Server .If you don't see aspnet-ContosoUniversity, run the project and log in using the admin credentials (password is devpwd), and then refresh the SQL Server Object Explorer window.

  3. Щелкните правой кнопкой мыши таблицу Пользователи и выберите пункт Конструктор представлений.Right-click the Users table, and then click View Designer.

    Конструктор представлений SSOX

  4. В конструкторе добавьте столбец Comments и сделайте его nvarchar (128) и Nullable, а затем нажмите кнопку Обновить.In the designer, add a Comments column and make it nvarchar(128) and nullable, and then click Update.

    Добавление столбца комментариев

  5. В поле Предварительный просмотр обновлений базы данных щелкните обновить базу данных.In the Preview Database Updates box, click Update Database.

    Предварительный просмотр обновлений базы данных

Создание страницы для просмотра и изменения нового столбцаCreate a page to display and edit the new column

  1. В Обозреватель решенийщелкните правой кнопкой мыши папку учетной записи в проекте ContosoUniversity, выберите Добавить, а затем щелкните новый элемент.In Solution Explorer, right-click the Account folder in the ContosoUniversity project, click Add, and then click New Item.

  2. Создайте новую веб-форму с помощью главной страницы и назовите ее userInfo. aspx.Create a new Web Form Using Master Page and name it UserInfo.aspx. Примите файл site. master по умолчанию в качестве главной страницы.Accept the default Site.Master file as the master page.

  3. Скопируйте следующую разметку в элемент MainContent Content (последний из 3 Content элементов):Copy the following markup into the MainContent Content element (the last of the 3 Content elements):

    <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. Щелкните правой кнопкой мыши страницу userInfo. aspx и выберите пункт Просмотр в браузере.Right-click the UserInfo.aspx page and click View in Browser.

  5. Войдите в систему с учетными данными администратора ( девпвд) и добавьте к пользователю комментарии, чтобы убедиться, что страница работает правильно.Log in with your admin user credentials (password is devpwd) and add some comments to a user to verify that the page works correctly.

    Страница UserInfo

  6. Закройте браузер.Close the browser.

Развертывание обновления базы данныхDeploy the database update

Чтобы выполнить развертывание с помощью поставщика Дбдакфкс, необходимо просто выбрать параметр обновить базу данных в профиле публикации.To deploy by using the dbDacFx provider, you just need to select the Update database option in the publish profile. Однако для первоначального развертывания при использовании этого параметра вы также настроили некоторые дополнительные скрипты SQL для выполнения: они все еще находятся в профиле, и вам нужно будет предотвратить их повторное выполнение.However, for the initial deployment when you used this option you also configured some additional SQL scripts to run: those are still in the profile and you'll have to prevent them from running again.

  1. Откройте мастер публикации веб-сайта , щелкнув правой кнопкой мыши проект ContosoUniversity и выбрав Publish (опубликовать).Open the Publish Web wizard by right-clicking the ContosoUniversity project and clicking Publish.

  2. Выберите профиль тестирования .Select the Test profile.

  3. Перейдите на вкладку Параметры .Click the Settings tab.

  4. В разделе DefaultConnectionвыберите обновить базу данных.Under DefaultConnection, select Update database.

  5. Отключите дополнительные скрипты, которые были настроены для выполнения начального развертывания:Disable the additional scripts that you configured to run for the initial deployment:

    1. Щелкните настроить обновления базы данных.Click Configure database updates.
    2. В диалоговом окне Настройка обновлений базы данных снимите флажки для GRANT. SQL и АСПнет-Дата-дев. SQL.In the Configure Database Updates dialog box, clear the check boxes next to Grant.sql and aspnet-data-dev.sql.
    3. Щелкните Закрыть.Click Close.
  6. Перейдите на вкладку Предварительный просмотр .Click the Preview tab.

  7. В разделе базы данных и справа от DefaultConnectionщелкните ссылку Предварительная версия базы данных .Under Databases and to the right of DefaultConnection, click the Preview database link.

    Предварительная версия базы данных

    В окне предварительного просмотра отображается скрипт, который будет выполняться в целевой базе данных, чтобы схема базы данных совпадала со схемой базы данных источника.The preview window shows the script that will be run in the destination database to make that database schema match the schema of the source database. Скрипт включает команду ALTER TABLE, которая добавляет новый столбец.The script includes an ALTER TABLE command that adds the new column.

  8. Закройте диалоговое окно Предварительный просмотр базы данных и нажмите кнопку опубликовать.Close the Database Preview dialog box, and then click Publish.

    Visual Studio развертывает обновленное приложение, и браузер открывается на домашней странице.Visual Studio deploys the updated application, and the browser opens to the home page.

  9. Запустите страницу UserInfo (добавьте учетную запись/UserInfo. aspx к URL-адресу домашней страницы), чтобы убедиться, что обновление успешно развернуто.Run the UserInfo page (add Account/UserInfo.aspx to the home page URL) to verify that the update was successfully deployed. Вам потребуется войти в систему, введя Admin and девпвд.You'll have to log in by entering admin and devpwd.

    Данные в таблицах не развертываются по умолчанию, и вы не настроили скрипт развертывания данных для выполнения, поэтому вы не найдете комментарий, добавленный при разработке.Data in tables is not deployed by default, and you didn't configure a data deployment script to run, so you won't find the comment that you added in development. Теперь можно добавить новый комментарий в промежуточной среде, чтобы убедиться, что изменение было развернуто в базе данных, и страница работает правильно.You can add a new comment now in staging to verify that the change was deployed to the database and the page works correctly.

  10. Выполните ту же процедуру для развертывания в промежуточной и рабочей среде.Follow the same procedure to deploy to staging and production.

    Не забудьте отключить дополнительные сценарии.Don't forget to disable the extra scripts. Единственная разница по сравнению с профилем тестирования заключается в том, что в промежуточном и рабочем профилях будет отключен только один скрипт, так как они были настроены для запуска только АСПнет-прод-Дата. SQL.The only difference compared to the Test profile is that you will disable only one script in the Staging and Production profiles because they were configured to run only aspnet-prod-data.sql.

    Учетные данные для промежуточного хранения и рабочей среды — Admin и продпвд.The credentials for staging and production are admin and prodpwd.

    Для реального обновления производственного приложения, включающего изменение базы данных, обычно приложение переводится в автономный режим во время развертывания путем отправки приложения _автономно. htm перед публикацией и удалением в дальнейшем, как было показано в предыдущем руководстве.For a real production application update that includes a database change you would also typically take the application offline during deployment by uploading app_offline.htm before publishing and deleting it afterward, as you saw in the previous tutorial.

СводкаSummary

Теперь вы развернули обновление приложения, которое включало изменение базы данных, с помощью Code First Migrations и поставщика Дбдакфкс.You've now deployed an application update that included a database change using both Code First Migrations and the dbDacFx provider.

Страница инструкторов с ДеньРождения

Страница UserInfo

В следующем учебнике показано, как выполнять развертывания с помощью командной строки.The next tutorial shows you how to execute deployments by using the command line.