Visual Studio를 사용 하 여 ASP.NET 웹 배포: 데이터베이스 업데이트 배포ASP.NET Web Deployment using Visual Studio: Deploying a Database Update

만든 사람 Tom Dykstraby Tom Dykstra

시작 프로젝트 다운로드Download Starter Project

이 자습서 시리즈에서는 Visual Studio 2012 또는 Visual Studio 2010를 사용 하 여 Azure App Service Web Apps 또는 타사 호스팅 공급자에 게 ASP.NET 웹 응용 프로그램을 배포 (게시) 하는 방법을 보여 줍니다.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 마이그레이션로 관리 되는 데이터베이스를 업데이트 한 다음 나중에 dbDacFx 공급자를 사용 하 여 데이터베이스를 업데이트 하는 방법을 보여 줍니다.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 마이그레이션를 사용 하 여 데이터베이스 업데이트 배포Deploy a database update by using Code First Migrations

이 섹션에서는 StudentInstructor 엔터티에 대 한 Person 기본 클래스에 생년월일 열을 추가 합니다.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 프로젝트에서 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가 여전히 기본 프로젝트로선택 되어 있는지 확인 합니다.Make sure that ContosoUniversity.DAL is still selected as the Default project.

  3. 패키지 관리자 콘솔 창에서 기본 프로젝트로 ContosoUniversity 를 선택 하 고 다음 명령을 입력 합니다.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 프로젝트를 계속 선택 해야 합니다).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. 채용 날짜 및 사무실 할당에 대 한 항목 사이에 추가 합니다.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.

    데이터베이스 변경을 포함 하는 실제 프로덕션 응용 프로그램 업데이트의 경우 일반적으로 이전 자습서에서 살펴본 것 처럼 응용 프로그램을 _오프 라인으로 사용 하 여 배포 하는 동안 응용 프로그램을 오프 라인으로 전환 합니다.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.

DbDacFx 공급자를 사용 하 여 데이터베이스 업데이트 배포Deploy a database update by using the dbDacFx provider

이 섹션에서는 멤버 자격 데이터베이스의 사용자 테이블에 comments 열을 추가 하 고 각 사용자에 대 한 설명을 표시 하 고 편집할 수 있는 페이지를 만듭니다.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 ( ContosoUniversity-Prod)를 차례로 확장 한 다음 테이블을 확장 합니다.Expand (localdb)\v11.0, expand Databases, expand aspnet-ContosoUniversity (not aspnet-ContosoUniversity-Prod) and then expand Tables.

    SQL Server 노드 아래에 (localdb) \v11.0 이 표시 되지 않으면 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.

    ContosoUniversity가 표시 되지 않으면 프로젝트를 실행 하 고 관리자 자격 증명 (암호는 devpwd)을 사용 하 여 로그인 한 다음 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. 디자이너에서 주석 열을 추가 하 고 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. 마스터 페이지를 사용 하 여 새 Web Form 을 만들고 이름을 login.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 페이지를 마우스 오른쪽 단추로 클릭 하 고 브라우저에서 보기를 클릭 합니다.Right-click the UserInfo.aspx page and click View in Browser.

  5. 관리자 사용자 자격 증명을 사용 하 여 로그인 하 고 (암호는 devpwd) 사용자에 게 일부 의견을 추가 하 여 페이지가 제대로 작동 하는지 확인 합니다.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

DbDacFx 공급자를 사용 하 여 배포 하려면 게시 프로필에서 데이터베이스 업데이트 옵션을 선택 하기만 하면 됩니다.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 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 게시를 클릭 하 여 웹 게시 마법사를 엽니다.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 and aspnet-data-dev옆에 있는 확인란의 선택을 취소 합니다.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. 정보 페이지 (홈 페이지 URL에 계정/개인 정보 .aspx 추가)를 실행 하 여 업데이트가 성공적으로 배포 되었는지 확인 합니다.Run the UserInfo page (add Account/UserInfo.aspx to the home page URL) to verify that the update was successfully deployed. 관리자devpwd를 입력 하 여 로그인 해야 합니다.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. 테스트 프로필에 비해 유일한 차이점은 준비 및 프로덕션 프로필은 aspnet-prod-data만 실행 하도록 구성 되었기 때문에 한 개의 스크립트만 사용 하지 않도록 설정 한다는 것입니다.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 및 prodpwd입니다.The credentials for staging and production are admin and prodpwd.

    데이터베이스 변경을 포함 하는 실제 프로덕션 응용 프로그램 업데이트의 경우 이전 자습서에서 살펴본 것 처럼 나중에 게시 하 고 삭제 하기 전에 오프 라인으로 앱_ 업로드 하 여 배포 중에 응용 프로그램을 오프 라인으로 전환 합니다.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 마이그레이션 및 dbDacFx 공급자를 사용 하 여 데이터베이스 변경 내용을 포함 하는 응용 프로그램 업데이트를 배포 했습니다.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.