Visual Studio 또는 Visual Web Developer를 사용하여 SQL Server Compact ASP.NET 웹 애플리케이션 배포: 데이터베이스 업데이트 배포 - 12개 중 9개

작성자 : Tom Dykstra

시작 프로젝트 다운로드

이 자습서 시리즈에서는 Visual Studio 2012 RC 또는 Visual Studio Express 2012 RC for Web을 사용하여 SQL Server Compact 데이터베이스를 포함하는 ASP.NET 웹 애플리케이션 프로젝트를 배포(게시)하는 방법을 보여 줍니다. 웹 게시 업데이트를 설치하는 경우 Visual Studio 2010을 사용할 수도 있습니다. 시리즈에 대한 소개는 시리즈의 첫 번째 자습서를 참조하세요.

Visual Studio 2012의 RC 릴리스 이후에 도입된 배포 기능을 보여 주는 자습서는 SQL Server Compact 이외의 SQL Server 버전을 배포하는 방법을 보여 줍니다. Azure App Service Web Apps 배포하는 방법을 보여 주는 자습서는 Visual Studio를 사용하여 웹 배포 ASP.NET 참조하세요.

개요

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

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

테이블에 새 열 추가

이 섹션에서는 및 Instructor 엔터티의 기본 클래스에 PersonStudent 생년월일 열을 추가합니다. 그런 다음 새 열을 표시할 수 있도록 강사 데이터를 표시하는 페이지를 업데이트합니다.

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") }
};

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

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

(코드 들여쓰기 동기화가 없으면 Ctrl-K를 누른 다음 Ctrl-D를 눌러 파일을 자동으로 다시 포맷할 수 있습니다.)

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

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

add-migration AddBirthDate

이 명령이 완료되면 Visual Studio는 새 클래스를 정의하는 클래스 파일을 열고 메서드에서 UpDbMigration 열을 만드는 코드를 볼 수 있습니다.

AddBirthDate_migration_code

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

update-database

명령이 완료되면 애플리케이션을 실행하고 강사 페이지를 선택합니다. 페이지가 로드되면 새 생년월일 필드가 표시됩니다.

Instructors_page_with_birth_date

테스트 환경에 데이터베이스 업데이트 배포

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

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

Visual Studio는 업데이트된 애플리케이션을 배포하고 브라우저가 홈페이지로 열립니다. 강사 페이지를 실행하여 업데이트가 성공적으로 배포되었는지 확인합니다. 애플리케이션이 이 페이지의 데이터베이스에 액세스하려고 하면 Code First가 데이터베이스 스키마를 업데이트하고 메서드를 Seed 실행합니다. 페이지가 표시되면 예상 생년월일 열에 날짜가 표시됩니다.

Instructors_page_with_birth_date_Test

프로덕션 환경에 데이터베이스 업데이트 배포

이제 프로덕션에 배포할 수 있습니다. 유일한 차이점은 사용자가 사이트에 액세스하여 변경 내용을 배포하는 동안 데이터베이스를 업데이트하는 것을 방지하기 위해 app_offline.htm 사용한다는 것입니다. 프로덕션 배포의 경우 다음 단계를 수행합니다.

  • 프로덕션 사이트에 app_offline.htm 파일을 업로드합니다.
  • Visual Studio의 웹 원클릭 게시 도구 모음에서 프로덕션 프로필을 선택하고 웹 게시를 클릭합니다.
  • 프로덕션 사이트에서 app_offline.htm 파일을 삭제합니다.

참고

애플리케이션이 프로덕션 환경에서 사용 중인 동안 백업 계획을 구현해야 합니다. 즉, 프로덕션 사이트에서 보안 스토리지 위치로 School-Prod.sdfaspnet-Prod.sdf 파일을 주기적으로 복사해야 하며 이러한 백업의 여러 세대를 유지해야 합니다. 데이터베이스를 업데이트하는 경우 변경 직전에 백업 복사본을 만들어야 합니다. 그런 다음, 실수를 저지르고 프로덕션에 배포할 때까지 데이터베이스를 검색하지 않으면 데이터베이스가 손상되기 전의 상태로 데이터베이스를 복구할 수 있습니다.

Visual Studio가 브라우저에서 홈페이지 URL을 열면 app_offline.htm 페이지가 표시됩니다. app_offline.htm 파일을 삭제한 후 홈페이지로 다시 이동하여 업데이트가 성공적으로 배포되었는지 확인할 수 있습니다.

Instructors_page_with_birth_date_Prod

이제 테스트 및 프로덕션 모두에 대한 데이터베이스 변경이 포함된 애플리케이션 업데이트를 배포했습니다. 다음 자습서에서는 데이터베이스를 SQL Server Compact SQL Server Express 및 SQL Server 마이그레이션하는 방법을 보여줍니다.