계층적 업데이트 개요
계층적 업데이트는 참조 무결성 규칙을 유지하면서 두 개 이상의 관련 테이블이 있는 데이터 집합에서 업데이트된 데이터를 다시 데이터베이스로 저장하는 것을 말합니다.참조 무결성은 관련 레코드의 삽입, 업데이트 및 삭제 동작을 제어하는 데이터베이스의 외래 키 제약 조건이 제공하는 일관성 규칙을 가리킵니다.예를 들어 고객에 대한 주문을 만들기 전에 고객 레코드를 만들도록 하는 것이 참조 무결성입니다.
개발자가 Visual Studio 2005 및 이전 버전에서 만든 데이터 응용 프로그램의 경우 자동 생성된 코드는 변경된 데이터를 데이터 소스 창에서 끌어 온 첫 번째 테이블에만 저장합니다.데이터 소스 창에서 추가 테이블을 끌어 올 때 사용자는 해당 테이블의 변경 내용을 데이터베이스에 저장하는 코드를 수동으로 추가해야 합니다.사용자는 각 테이블에 대한 TableAdapter.Update 메서드를 호출하는 코드를 추가하는 외에도, 참조 무결성 위반을 방지하기 위해서는 삽입, 업데이트 및 삭제 작업이 적절한 순서로 수행될 수 있도록 논리를 통합해야 합니다.예를 들어 새 고객의 주문을 추가하기 전에 고객을 저장해야 하며 기존 고객을 제거하기 전에 주문을 삭제해야 합니다.
Visual Studio 2008부터는 형식화된 데이터 집합이 새 TableAdapterManager 구성 요소에 의해 향상되었습니다.TableAdapterManager에서는 여러 관련 테이블의 데이터를 저장하는 데 필요한 코드가 여러 줄의 코드로 이루어진 여러 개의 루틴에서 하나의 메서드 호출(TableAdapterManager.UpdateAll(TypedDataset))로 줄었습니다.TableAdapterManager는 데이터 집합과 데이터베이스 간의 업데이트(저장) 작업 중에 참조 무결성을 유지하는 데 필요한 모든 기본 논리를 제공합니다.자세한 내용은 TableAdapterManager 개요를 참조하십시오.
데이터 집합에서 계층적 업데이트 설정
기본적으로 계층적 업데이트는 프로젝트에 추가되거나 작성되는 모든 새 데이터 집합에 대해 설정됩니다.형식화된 데이터 집합 만들기 및 편집에서 형식화된 데이터 집합의 Hierarchical Update 속성을 True 또는 False로 설정하여 계층적 업데이트를 설정하거나 해제할 수 있습니다.자세한 내용은 방법: 계층적 업데이트 활성화 및 비활성화를 참조하십시오.
외래 키 제약 조건과 계단식 업데이트 및 삭제
생성된 데이터 집합 코드에서 데이터베이스의 외래 키 제약 조건과 계단식 동작이 생성되는 방식을 이해해야 합니다.
기본적으로 데이터 집합의 데이터 테이블은 데이터베이스 내의 관계와 일치하는 관계(DataRelation)를 이루며 생성됩니다.하지만 데이터 집합의 관계는 외래 키 제약 조건으로 생성되지 않습니다.DataRelation은 유효한 UpdateRule 또는 DeleteRule 없이 관계만으로 구성됩니다.
계단식 업데이트 및 계단식 삭제가 설정된 상태로 데이터베이스 관계가 구성된 경우에도 계단식 업데이트와 계단식 삭제는 기본적으로 해제됩니다.예를 들어 새 고객과 새 주문을 만든 다음 데이터를 저장하려고 하면 데이터베이스에 정의된 외래 키 제약 조건과 충돌이 발생합니다.자세한 내용은 방법: 데이터 집합의 외래 키 제약 조건 구성을 참조하십시오.
업데이트 수행 순서 설정
업데이트 수행 순서를 설정하면 수정된 모든 데이터를 데이터 집합의 모든 테이블에 저장하는 데 필요한 삽입, 업데이트 및 삭제 작업의 순서가 설정됩니다.계층적 업데이트가 설정된 경우 삽입, 업데이트 및 삭제의 차례로 수행됩니다.TableAdapterManager에서는 업데이트를 먼저 수행하고, 삽입과 삭제를 차례로 수행하도록 설정할 수 있는 UpdateOrder 속성을 제공합니다.
[!참고]
업데이트 순서에는 모든 것이 포함된다는 점을 이해해야 합니다.즉, 업데이트가 수행될 때는 데이터 집합의 모든 테이블에 대해 삽입이 수행되고, 그 다음에 데이터 집합의 모든 테이블에 대해 업데이트가 수행된 다음 데이터 집합의 모든 테이블에 대해 삭제가 수행됩니다.
UpdateOrder 속성을 설정하려면 항목을 데이터 소스 창에서 폼으로 끌어 온 다음 구성 요소 트레이에서 TableAdapterManager를 클릭하고 속성 창에서 UpdateOrder 속성을 설정합니다.자세한 내용은 방법: 계층적 업데이트를 수행하는 경우 순서 설정을 참조하십시오.
계층적 업데이트를 수행하기 전에 데이터 집합의 백업 복사본 만들기
TableAdapterManager.UpdateAll() 메서드를 호출하여 데이터를 저장할 때 TableAdapterManager는 단일 트랜잭션에서 각 테이블에 대한 데이터의 업데이트를 시도합니다.모든 테이블에 대한 업데이트 중 일부라도 실패한 경우에는 전체 트랜잭션이 롤백됩니다.대부분의 경우 트랜잭션을 롤백하면 응용 프로그램이 원래 상태로 돌아갑니다.하지만 경우에 따라 백업 복사본에서 데이터 집합을 복원해야 할 수 있습니다.자동 증분 값을 사용하는 경우가 여기에 해당됩니다.예를 들어 저장 작업에 실패하고 자동 증분 값이 데이터 집합에서 다시 설정되지 않은 상태에서 데이터 집합이 계속 자동 증분 값을 생성하는 경우 번호 중간이 비게 되어 응용 프로그램에서 문제가 될 수 있습니다.이와 같이 문제가 되는 상황을 위해 TableAdapterManager에서는 트랜잭션 실패 시 기존 데이터 집합을 백업 복사본으로 바꾸는 BackupDataSetBeforeUpdate 속성을 제공합니다.
[!참고]
백업 복사본은 TableAdapterManager.UpdateAll 메서드 실행 중에는 메모리 내에만 있습니다.이 복사본은 원래 데이터 집합을 대체하거나 TableAdapterManager.UpdateAll 메서드 실행이 완료되는 즉시 범위를 벗어나게 되기 때문에 이 백업 데이터 집합에 대한 프로그래밍 방식의 액세스는 없습니다.
참고 항목
작업
연습: 관련 데이터 테이블의 데이터 저장(계층적 업데이트)
개념
Visual Studio 2012 데이터 응용 프로그램 개발의 새로운 기능