비고
클래스 및 관련 클래스는 DataSet 2000년대 초반의 레거시 .NET Framework 기술로, 애플리케이션이 데이터베이스와 연결이 끊긴 동안 애플리케이션이 메모리의 데이터로 작업할 수 있도록 합니다. 이 기술은 사용자가 데이터를 수정하고 변경 내용을 데이터베이스에 다시 유지할 수 있도록 하는 앱에 특히 유용합니다. 데이터 세트는 입증된 성공적인 기술이지만 새 .NET 애플리케이션에 권장되는 방법은 Entity Framework Core를 사용하는 것입니다. Entity Framework는 테이블 형식 데이터를 개체 모델로 사용하는 보다 자연스러운 방법을 제공하며 더 간단한 프로그래밍 인터페이스를 제공합니다.
관련 데이터 테이블이 포함된 데이터 세트는 개체를 사용하여 DataRelation 테이블 간의 부모/자식 관계를 나타내고 서로 관련 레코드를 반환합니다. 데이터 원본 구성 마법사 또는 데이터셋 디자이너를 사용하여 데이터셋에 관련 테이블을 추가하면 DataRelation 개체가 자동으로 생성되고 구성됩니다.
개체는 DataRelation 다음 두 가지 함수를 수행합니다.
작업 중인 레코드와 관련된 레코드를 제공할 수 있습니다. 부모 레코드(GetChildRows)에 있는 경우 자식 레코드를 제공하고, 자식 레코드(GetParentRow)로 작업하고 있는 경우 부모 레코드를 제공합니다.
부모 레코드를 삭제할 때 관련 자식 레코드를 삭제하는 등 참조 무결성에 대한 제약 조건을 적용할 수 있습니다.
실제 조인과 개체의 DataRelation 함수 간의 차이를 이해하는 것이 중요합니다. 실제 조인에서 레코드는 부모 및 자식 테이블에서 가져와서 단일 플랫 레코드 집합에 배치됩니다. 개체를 DataRelation 사용하는 경우 새 레코드 집합이 만들어지지 않습니다. 대신 DataRelation은 테이블 간의 관계를 추적하고 부모 레코드와 자식 레코드를 동기화 상태로 유지합니다.
DataRelation 개체 및 제약 조건
DataRelation 개체는 다음 제약 조건을 만들고 적용하는 데도 사용됩니다.
테이블의 열에 중복 항목이 없음을 보장하는 고유 제약 조건입니다.
데이터 세트의 부모 테이블과 자식 테이블 간의 참조 무결성을 유지하는 데 사용할 수 있는 외래 키 제약 조건입니다.
개체에서 DataRelation 지정하는 제약 조건은 자동으로 적절한 개체를 만들거나 속성을 설정하여 구현됩니다. DataRelation 개체로 외래 키 제약 조건을 만드는 경우, ForeignKeyConstraint 클래스의 인스턴스가 DataRelation 개체의 ChildKeyConstraint 속성에 추가됩니다.
고유한 제약 조건은 단순히 데이터 열의 Unique 속성을 true
으로 설정하거나, UniqueConstraint 클래스의 인스턴스를 DataRelation 개체의 ParentKeyConstraint 속성에 추가하여 구현됩니다. 데이터 세트의 제약 조건을 일시 중단하는 방법에 대한 자세한 내용은 데이터 세트를 채우는 동안 제약 조건 해제를 참조하세요.
참조 무결성 규칙
외래 키 제약 조건의 일부로 다음 세 가지 지점에 적용되는 참조 무결성 규칙을 지정할 수 있습니다.
부모 레코드가 업데이트되는 경우
부모 레코드가 삭제되는 경우
변경이 수락되거나 거부되는 경우
수행할 수 있는 규칙은 열거형에 Rule 지정되며 다음 표에 나와 있습니다.
외래 키 제약 조건 규칙 | 조치 |
---|---|
Cascade | 부모 레코드에 대한 변경(업데이트 또는 삭제)은 자식 테이블의 관련 레코드에서도 적용됩니다. |
SetNull | 자식 레코드는 삭제되지 않지만 자식 레코드의 외래 키는 .로 DBNull설정됩니다. 이 설정을 사용하면 자식 레코드를 "고아"로 남겨둘 수 있습니다. 즉, 부모 레코드와 아무런 관계가 없습니다. 메모: 이 규칙을 사용하면 자식 테이블에서 잘못된 데이터가 발생할 수 있습니다. |
SetDefault | 관련 자식 레코드의 외래 키는 열의 DefaultValue 속성에 의해 설정된 기본값으로 설정됩니다. |
None | 관련 자식 레코드는 변경되지 않습니다. 이 설정을 사용하면 자식 레코드에 잘못된 부모 레코드에 대한 참조가 포함될 수 있습니다. |
데이터 세트 테이블의 업데이트에 대한 자세한 내용은 데이터를 데이터베이스에 다시 저장을 참조하세요.
제약 조건 전용 관계
개체를 DataRelation 만들 때 관계를 제약 조건을 적용하는 데만 사용하도록 지정하는 옵션이 있습니다. 즉, 관련 레코드에 액세스하는 데도 사용되지 않습니다. 이 옵션을 사용하여 관련 레코드 기능이 있는 메서드보다 약간 더 효율적이며 더 적은 메서드를 포함하는 데이터 세트를 생성할 수 있습니다. 그러나 관련 레코드에 액세스할 수 없습니다. 예를 들어 제약 조건 전용 관계를 사용하면 자식 레코드가 여전히 있는 부모 레코드를 삭제할 수 없으며 부모를 통해 자식 레코드에 액세스할 수 없습니다.
데이터 세트 디자이너에서 수동으로 데이터 관계 만들기
Visual Studio에서 데이터 디자인 도구를 사용하여 데이터 테이블을 만들 때 데이터 원본에서 정보를 수집할 수 있으면 관계가 자동으로 만들어집니다. 도구 상자의 데이터 세트 탭에서 데이터 테이블을 수동으로 추가하는 경우 관계를 수동으로 만들어야 할 수 있습니다. 프로그래밍 방식으로 개체를 만드는 DataRelation 방법에 대한 자세한 내용은 DataRelations 추가를 참조하세요.
데이터 테이블 간의 관계는 데이터 세트 디자이너에서 일대다 측면을 나타내는 키와 무한대 문자 모양이 있는 선으로 나타납니다. 기본적으로 관계의 이름은 디자인 화면에 표시되지 않습니다.
비고
이 문서의 지침은 Visual Studio에서 사용할 수 있는 IDE(대화형 개발 환경)의 최신 버전을 보여 줍니다. 컴퓨터에 일부 사용자 인터페이스 요소에 대한 다른 이름 또는 위치가 표시될 수 있습니다. 다른 버전의 Visual Studio 또는 다른 환경 설정을 사용할 수 있습니다. 자세한 내용은 IDE 개인 설정참조하세요.
두 데이터 테이블 간의 관계를 만들려면
데이터 세트 디자이너에서 데이터 세트를 여세요. 자세한 내용은 연습: 데이터 세트 디자이너에서 데이터 세트 만들기를 참조하세요.
DataSet 도구 상자에서 관계의 자식 데이터 테이블로 Relation 개체를 끕니다.
관계 대화 상자가 열리면, 자식 테이블 상자에 관계 개체를 끌어온 테이블이 채워집니다.
부모 테이블 상자에서 부모 테이블을 선택합니다. 부모 테이블에는 일대다 관계의 "일" 쪽에 레코드가 포함됩니다.
올바른 자식 테이블이 자식 테이블 상자에 표시되는지 확인합니다. 자식 테이블에는 일대다 관계의 "다" 쪽에 있는 레코드가 포함됩니다.
이름 상자에 관계의 이름을 입력하거나 선택한 테이블에 따라 기본 이름을 그대로 둡니다. 코드에서 실제 DataRelation 개체의 이름입니다.
키 열 및 외래 키 열 목록에서 테이블을 조인할 열을 선택합니다.
관계, 제약 조건 또는 둘 다를 만들 것인지 선택합니다.
중첩된 관계 상자를 선택하거나 선택 취소하세요. 이 옵션을 선택하면 Nested 속성이
true
로 설정되고, 해당 행이 XML 데이터로 작성되거나 XmlDataDocument와 동기화될 때 관계의 자식 행이 부모 열 내에 중첩됩니다. 자세한 내용은 데이터 관계 중첩을 참조하세요.이러한 테이블의 레코드를 변경할 때 적용할 규칙을 설정합니다. 자세한 내용은 Rule를 참조하세요.
확인을 클릭하여 관계를 만듭니다. 두 테이블 사이의 관계선이 디자이너에 나타납니다.
데이터 세트 디자이너에서 관계 이름을 표시하려면
데이터 세트 디자이너에서 데이터 세트를 여세요. 자세한 내용은 연습: 데이터 세트 디자이너에서 데이터 세트 만들기를 참조하세요.
데이터 메뉴에서 관계 레이블 표시 명령을 선택하여 관계 이름을 표시합니다. 관계 이름을 숨기려면 해당 명령의 선택을 취소합니다.