다음을 통해 공유


Visual Studio를 사용하여 웹 배포 ASP.NET: 데이터베이스 업데이트 배포

작성자: Tom Dykstra

시작 프로젝트 다운로드

이 자습서 시리즈에서는 Visual Studio 2012 또는 Visual Studio 2010을 사용하여 ASP.NET 웹 애플리케이션을 Azure 앱 Service Web Apps 또는 타사 호스팅 공급자에 배포(게시)하는 방법을 보여 줍니다. 시리즈에 대한 자세한 내용은 시리즈의 첫 번째 자습서를 참조하세요.

개요

이 자습서에서는 데이터베이스 변경 및 관련 코드를 변경하고, Visual Studio에서 변경 내용을 테스트한 다음, 테스트, 스테이징 및 프로덕션 환경에 업데이트를 배포합니다.

이 자습서에서는 먼저 Code First 마이그레이션 의해 관리되는 데이터베이스를 업데이트하는 방법을 보여 낸 다음, 나중에 dbDacFx 공급자를 사용하여 데이터베이스를 업데이트하는 방법을 보여줍니다.

미리 알림: 자습서를 진행하는 동안 오류 메시지가 표시되거나 문제가 해결되지 않는 경우 문제 해결 페이지를 확인해야 합니다.

Code First 마이그레이션 사용하여 데이터베이스 업데이트 배포

이 섹션에서는 및 엔터티의 기본 클래스에 Person Student Instructor 생년월일 열을 추가합니다. 그런 다음 새 열을 표시할 수 있도록 강사 데이터를 표시하는 페이지를 업데이트합니다. 마지막으로 테스트, 스테이징 및 프로덕션에 변경 내용을 배포합니다.

애플리케이션 데이터베이스의 테이블에 열 추가

  1. ContosoUniversity.DAL 프로젝트에서 Person.cs 열고 클래스의 Person 끝에 다음 속성을 추가합니다(다음에 두 개의 닫는 중괄호가 있어야 합니다.)

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

    다음으로 새 열에 Seed 대한 값을 제공하려면 메서드를 업데이트합니다. Migrations\Configuration.cs 열고 생년월일 정보를 포함하는 다음 코드 블록으로 시작하는 var instructors = new List<Instructor> 코드 블록을 바꿉니다.

    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. 솔루션을 빌드한 다음 패키지 관리자 콘솔 창을 엽니다. ContosoUniversity.DAL이 여전히 기본 프로젝트선택되어 있는지 확인합니다.

  3. 패키지 관리자 콘솔 창에서 ContosoUniversity.DAL기본 프로젝트로 선택한 다음, 다음 명령을 입력합니다.

    add-migration AddBirthDate
    

    이 명령이 완료되면 Visual Studio에서 새 DbMigration 클래스를 정의하는 클래스 파일을 열고 메서드에서 Up 새 열을 만드는 코드를 볼 수 있습니다. 이 메서드는 Up 변경 사항을 구현할 때 열을 만들고 변경 Down 사항을 롤백할 때 해당 열을 삭제합니다.

    AddBirthDate_migration_code

  4. 솔루션을 빌드한 다음 패키지 관리자 콘솔 창에 다음 명령을 입력합니다(ContosoUniversity.DAL 프로젝트가 여전히 선택되어 있는지 확인).

    update-database
    

    Entity Framework는 메서드를 실행한 Up 다음 메서드를 실행합니다 Seed .

강사 페이지에 새 열 표시

  1. ContosoUniversity 프로젝트에서 Instructors.aspx 열고 새 템플릿 필드를 추가하여 생년월일을 표시합니다. 고용 날짜와 사무실 과제에 대한 작업 간에 추가합니다.

    <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를 눌러 파일을 자동으로 다시 포맷할 수 있습니다.

  2. 애플리케이션을 실행하고 강사 링크를 클릭합니다.

    페이지가 로드되면 새 생년월일 필드가 표시됩니다.

    이름, 고용 날짜, 생년월일 및 사무실 과제를 보여 주는 강사 페이지의 스크린샷.

  3. 브라우저를 닫습니다.

데이터베이스 업데이트 배포

  1. 솔루션 탐색기 ContosoUniversity 프로젝트를 선택합니다.

  2. 웹 하나 클릭 게시 도구 모음에서 게시 테스트 프로필을 클릭한 다음 웹 게시를 클릭합니다. 도구 모음을 사용하지 않도록 설정한 경우 ContosoUniversity 프로젝트를 선택합니다.솔루션 탐색기.)

    Visual Studio는 업데이트된 애플리케이션을 배포하고 브라우저가 홈페이지로 열립니다.

  3. 강사 페이지를 실행하여 업데이트가 성공적으로 배포되었는지 확인합니다.

    애플리케이션이 이 페이지의 데이터베이스에 액세스하려고 하면 Code First가 데이터베이스 스키마를 업데이트하고 메서드를 Seed 실행합니다. 페이지가 표시되면 예상 생년월일 열에 날짜가 표시됩니다.

  4. 웹 하나 클릭 게시 도구 모음에서 스테이 게시 프로필을 클릭한 다음 웹 게시를 클릭합니다.

  5. 스테이 징에서 강사 페이지를 실행하여 업데이트가 성공적으로 배포되었는지 확인합니다.

  6. Web One Click Publish 도구 모음에서 프로덕션 게시 프로필을 클릭한 다음 웹 게시를 클릭합니다.

  7. 프로덕션에서 강사 페이지를 실행하여 업데이트가 성공적으로 배포되었는지 확인합니다.

    데이터베이스 변경이 포함된 실제 프로덕션 애플리케이션 업데이트의 경우 일반적으로 이전 자습서에서 보았듯이 app_offline.htm 사용하여 배포하는 동안 애플리케이션을 오프라인으로 전환합니다.

dbDacFx 공급자를 사용하여 데이터베이스 업데이트 배포

이 섹션에서는 멤버 자격 데이터베이스의 사용자 테이블에 메모 열을 추가하고 각 사용자에 대한 메모를 표시하고 편집할 수 있는 페이지를 만듭니다. 그런 다음, 테스트, 스테이징 및 프로덕션에 변경 내용을 배포합니다.

멤버 자격 데이터베이스의 테이블에 열 추가

  1. Visual Studio에서 SQL Server 개체 탐색기 엽니다.

  2. (localdb)\v11.0을 확장하고, 데이터베이스를 확장하고, aspnet-ContosoUniversity(aspnet-ContosoUniversity-Prod 아님)를 확장한 다음 테이블을 확장합니다.

    SQL Server 노드 아래에 (localdb)\v11.0이 표시되지 않으면 SQL Server 노드를 마우스 오른쪽 단추로 클릭하고 SQL Server 추가를 클릭합니다. 서버에 연결 대화 상자에서 서버 이름으로 (localdb)\v11.0입력하고 연결을 클릭합니다.

    aspnet-ContosoUniversity가 표시되지 않으면 프로젝트를 실행하고 관리자 자격 증명(암호가 devpwd)을 사용하여 로그인한 다음 SQL Server 개체 탐색기 창을 새로 고칩니다.

  3. 사용자 테이블을 마우스 오른쪽 단추로 클릭한 다음 뷰 디자이너를 클릭합니다.

    SSOX 뷰 디자이너

  4. 디자이너에서 Comments 열을 추가하고 nvarchar(128) 및 nullable로 지정한 다음 업데이트를 클릭합니다.

    Comments 열 추가

  5. 데이터베이스 업데이트 미리 보기 상자에서 데이터베이스 업데이트를 클릭합니다.

    데이터베이스 업데이트 미리 보기

새 열을 표시하고 편집할 페이지 만들기

  1. 솔루션 탐색기 ContosoUniversity 프로젝트에서 계정 폴더를 마우스 오른쪽 단추로 클릭하고 추가를 클릭한 다음 새 항목을 클릭합니다.

  2. 마스터 페이지를 사용하여 새 웹 양식을 만들고 이름을 UserInfo.aspx. 기본 Site.Master 파일을 마스터 페이지로 적용합니다.

  3. 요소에 다음 태그를 MainContent Content 복사합니다(3 Content 개 요소 중 마지막 부분).

    <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 페이지를 마우스 오른쪽 단추로 클릭하고 브라우저에서 보기를 클릭합니다.

  5. 관리자 사용자 자격 증명(암호가 devpwd임)으로 로그인하고 사용자에게 일부 메모를 추가하여 페이지가 제대로 작동하는지 확인합니다.

    UserName 테스트 및 Comment Tom의 테스트 계정을 표시하는 UserInfo 페이지를 보여 주는 스크린샷

  6. 브라우저를 닫습니다.

데이터베이스 업데이트 배포

dbDacFx 공급자를 사용하여 배포하려면 게시 프로필에서 데이터베이스 업데이트 옵션을 선택하기만 하면 됩니다. 그러나 이 옵션을 사용한 초기 배포의 경우 실행할 몇 가지 추가 SQL 스크립트도 구성했습니다. 이 스크립트는 여전히 프로필에 있으며 다시 실행되지 않도록 해야 합니다.

  1. ContosoUniversity 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 클릭하여 웹 게시 마법사를 엽니다.

  2. 테스트 프로필을 선택합니다.

  3. 설정 탭을 클릭합니다.

  4. DefaultConnection에서 데이터베이스 업데이트를 선택합니다.

  5. 초기 배포를 위해 실행하도록 구성한 추가 스크립트를 사용하지 않도록 설정합니다.

    1. 데이터베이스 업데이트 구성을 클릭합니다.
    2. 데이터베이스 업데이트 구성 대화 상자에서 Grant.sql 옆에 있는 확인란의 선택을 취소하고 aspnet-data-dev.sql.
    3. 닫기를 클릭합니다.
  6. 미리 보기 도구 모음에서 미리 보기 탭을 클릭합니다.

  7. 데이터베이스 아래 의 DefaultConnection 오른쪽에서 데이터베이스 미리 보기 링크를 클릭합니다.

    데이터베이스 미리 보기

    미리 보기 창에는 대상 데이터베이스에서 실행되어 해당 데이터베이스 스키마가 원본 데이터베이스의 스키마와 일치하도록 하는 스크립트가 표시됩니다. 스크립트에는 새 열을 추가하는 ALTER TABLE 명령이 포함되어 있습니다.

  8. 데이터베이스 미리 보기 대화 상자를 닫은 다음 게시를 클릭합니다.

    Visual Studio는 업데이트된 애플리케이션을 배포하고 브라우저가 홈페이지로 열립니다.

  9. UserInfo 페이지(홈페이지 URL에 계정/UserInfo.aspx 추가)를 실행하여 업데이트가 성공적으로 배포되었는지 확인합니다. 관리자devpwd를 입력하여 로그인해야 합니다.

    테이블의 데이터는 기본적으로 배포되지 않으며 실행되도록 데이터 배포 스크립트를 구성하지 않았으므로 개발에서 추가한 주석을 찾을 수 없습니다. 이제 스테이징에서 새 주석을 추가하여 변경 내용이 데이터베이스에 배포되고 페이지가 올바르게 작동하는지 확인할 수 있습니다.

  10. 동일한 절차에 따라 스테이징 및 프로덕션에 배포합니다.

    추가 스크립트를 사용하지 않도록 설정하는 것을 잊지 마세요. 테스트 프로필과 비교할 때 유일한 차이점은 스테이징 및 프로덕션 프로필에서 스크립트가 aspnet-prod-data.sql만 실행하도록 구성되었기 때문에 하나의 스크립트만 사용하지 않도록 설정한다는 것입니다.

    스테이징 및 프로덕션에 대한 자격 증명은 관리자 및 prodpwd입니다.

    데이터베이스 변경이 포함된 실제 프로덕션 애플리케이션 업데이트의 경우 이전 자습서에서 보았듯이 일반적으로 배포 중에 게시하고 삭제하기 전에 app_offline.htm 업로드하여 애플리케이션을 오프라인으로 전환합니다.

요약

이제 Code First 마이그레이션 및 dbDacFx 공급자를 모두 사용하여 데이터베이스 변경이 포함된 애플리케이션 업데이트를 배포했습니다.

이름, 고용 날짜, 생년월일 및 사무실 과제를 표시하는 강사 페이지를 보여 주는 스크린샷.

UserName 테스트 및 Comment Tom의 테스트 계정을 보여 주는 UserInfo 페이지의 스크린샷.

다음 자습서에서는 명령줄을 사용하여 배포를 실행하는 방법을 보여 줍니다.