연습: 엔터티 클래스의 삽입, 업데이트 및 삭제 동작 사용자 지정
업데이트: November 2007
O/R 디자이너(개체 관계형 디자이너)에서는 데이터베이스의 개체를 기반으로 LINQ to SQL 클래스(엔터티 클래스)를 만들고 편집하는 시각적 디자인 화면을 제공합니다. LINQ to SQL을 사용하면 LINQ 기술을 사용하여 SQL 데이터베이스에 액세스할 수 있습니다. 자세한 내용은 LINQ(통합 언어 쿼리)를 참조하십시오.
기본적으로 업데이트를 수행하는 논리는 LINQ to SQL 런타임에서 제공합니다. 런타임에서는 열 정의 및 기본 키 정보와 같은 테이블 스키마를 기반으로 기본 Insert, Update 및 Delete 문을 만듭니다. 기본 동작을 사용하지 않으려면 업데이트 동작을 구성하고 데이터베이스의 데이터 작업에 필요한 삽입, 업데이트 및 삭제를 수행하기 위한 특정 저장 프로시저를 지정할 수 있습니다. 엔터티 클래스가 뷰에 매핑되는 때와 같이 기본 동작이 생성되지 않은 경우에도 이렇게 할 수 있습니다. 또한 저장 프로시저를 통해 데이터베이스의 테이블에 액세스해야 하는 경우에 기본 업데이트 동작을 재정의할 수 있습니다. 자세한 내용은 저장 프로시저를 사용하여 작업 사용자 지정(LINQ to SQL)을 참조하십시오.
참고: |
---|
이 연습을 수행하려면 Northwind 데이터베이스의 InsertCustomer, UpdateCustomer 및 DeleteCustomer 저장 프로시저를 사용할 수 있어야 합니다. 이러한 저장 프로시저를 만드는 방법에 대한 자세한 내용은 연습: Northwind Customers 테이블의 업데이트 저장 프로시저 만들기를 참조하십시오. |
이 연습에서는 저장 프로시저를 사용하여 데이터를 데이터베이스에 다시 저장하기 위한 기본 LINQ to SQL 런타임 동작을 재정의하는 단계에 대해 설명합니다.
이 연습을 통해 다음 작업을 수행하는 방법을 배웁니다.
새 Windows Forms 응용 프로그램을 만들고 여기에 LINQ to SQL 파일을 추가합니다.
Northwind Customers 테이블에 매핑되는 엔터티 클래스를 만듭니다..
LINQ to SQL Customer 클래스를 참조하는 개체 데이터 소스를 만듭니다.
Customer 클래스에 바인딩된 DataGridView를 포함하는 Windows Form을 만듭니다.
폼의 저장 기능을 구현합니다.
O/R 디자이너에 저장 프로시저를 추가하여 DataContext 메서드를 만듭니다.
저장 프로시저를 사용하여 삽입, 업데이트 및 삭제를 수행하도록 Customer 클래스를 구성합니다.
사전 요구 사항
이 연습을 완료하려면 다음이 필요합니다.
Northwind 샘플 데이터베이스의 SQL Server 버전에 액세스할 수 있어야 합니다. 자세한 내용은 방법: 샘플 데이터베이스 설치를 참조하십시오.
Northwind 데이터베이스의 InsertCustomer, UpdateCustomer 및 DeleteCustomer 저장 프로시저. 자세한 내용은 연습: Northwind Customers 테이블의 업데이트 저장 프로시저 만들기를 참조하십시오.
응용 프로그램 만들기 및 LINQ to SQL 클래스 추가
LINQ to SQL 클래스로 작업하고 데이터를 Windows Form에 표시하므로 새 Windows Forms 응용 프로그램을 만들고 LINQ to SQL 클래스 파일을 추가합니다.
참고: |
---|
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
LINQ to SQL 클래스를 포함하는 새 Windows 응용 프로그램을 만들려면
파일 메뉴에서 새 프로젝트를 만듭니다.
프로젝트 이름을 UpdatingwithSProcsWalkthrough로 지정합니다.
참고: O/R 디자이너는 Visual Basic 및 C# 프로젝트에서 지원됩니다. 따라서 이러한 언어 중 하나로 새 프로젝트를 만듭니다.
Windows Forms 응용 프로그램 템플릿을 클릭한 다음 확인을 클릭합니다. 자세한 내용은 Windows 기반 응용 프로그램 만들기를 참조하십시오.
UpdatingwithSProcsWalkthrough 프로젝트가 만들어져 솔루션 탐색기에 추가됩니다.
프로젝트 메뉴에서 새 항목 추가를 클릭합니다.
LINQ to SQL 클래스 템플릿을 클릭하고 이름 상자에 Northwind.dbml을 입력합니다.
추가를 클릭합니다.
빈 LINQ to SQL 클래스 파일(Northwind.dbml)이 프로젝트에 추가되고 O/R 디자이너가 열립니다.
Customer 엔터티 클래스 및 개체 데이터 소스 만들기
서버 탐색기/데이터베이스 탐색기에서 O/R 디자이너로 테이블을 끌어 데이터베이스 테이블에 매핑된 LINQ to SQL 클래스를 만듭니다. 그러면 데이터베이스의 테이블에 매핑되는 LINQ to SQL 엔터티 클래스가 생성됩니다. 엔터티 클래스를 만든 후 이 클래스를 공용 속성이 있는 다른 클래스처럼 개체 데이터 소스로 사용할 수 있습니다.
Customer 엔터티 클래스를 만들고 이 클래스를 사용하여 데이터 소스를 구성하려면
서버 탐색기/데이터베이스 탐색기를 사용하여 Northwind 샘플 데이터베이스의 SQL Server 버전에서 Customers 테이블을 찾습니다. 자세한 내용은 방법: Northwind 데이터베이스에 데이터 연결 만들기를 참조하십시오.
서버 탐색기/데이터베이스 탐색기에서 Customers 노드를 O/R 디자이너 화면으로 끌어 옵니다.
Customer라는 엔터티 클래스가 만들어집니다. 이 클래스에는 Customers 테이블의 열에 해당하는 속성이 있습니다. 이 엔터티 클래스는 Customers 테이블의 단일 고객을 나타내므로 이름이 Customers가 아닌 Customer로 지정됩니다.
참고: 이러한 이름 바꾸기 동작을 복수 적용이라고 합니다. 옵션 대화 상자(Visual Studio)에서 이 동작을 설정하거나 해제할 수 있습니다. 자세한 내용은 방법: 복수 적용 설정 및 해제(O/R 디자이너)를 참조하십시오.
빌드 메뉴에서 UpdatingwithSProcsWalkthrough 빌드를 클릭하여 프로젝트를 빌드합니다.
데이터 메뉴에서 데이터 소스 표시를 클릭합니다.
데이터 소스 창에서 새 데이터 소스 추가를 클릭합니다.
데이터 소스 형식 선택 페이지에서 개체를 클릭하고 다음을 클릭합니다.
UpdatingwithSProcsWalkthrough 노드를 확장하고 Customer 클래스를 찾아 선택합니다.
참고: Customer 클래스를 사용할 수 없는 경우에는 마법사를 취소하고 프로젝트를 빌드한 다음 마법사를 다시 실행합니다.
마침을 클릭하여 데이터 소스를 만들고 데이터 소스 창에 Customer 엔터티 클래스를 추가합니다.
Windows Form에 고객 데이터를 표시하기 위해 DataGridView 만들기
데이터 소스 창에서 Windows Form으로 LINQ to SQL 데이터 소스 항목을 끌어 와서 엔터티 클래스에 바인딩된 컨트롤을 만듭니다.
엔터티 클래스에 바인딩된 컨트롤을 추가하려면
디자인 뷰에서 Form1을 엽니다.
데이터 소스 창에서 Customer 노드를 Form1로 끌어 옵니다.
참고: 데이터 소스 창을 표시하려면 데이터 메뉴에서 데이터 소스 표시를 클릭합니다.
코드 편집기에서 Form1을 엽니다.
폼에서 특정 메서드의 외부이지만 Form1 클래스의 내부인 위치에 다음 코드를 폼에 대해 전역적으로 추가합니다.
Private NorthwindDataContext1 As New NorthwindDataContext
private NorthwindDataContext northwindDataContext1 = new NorthwindDataContext();
Form_Load 이벤트에 대한 이벤트 처리기를 만들고 다음 코드를 처리기에 추가합니다.
CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
customerBindingSource.DataSource = northwindDataContext1.Customers;
저장 기능 구현
기본적으로 저장 단추를 사용할 수 없으며 저장 기능이 구현되지 않습니다. 또한 개체 데이터 소스에 대해 데이터 바인딩된 컨트롤을 만들 때 변경된 데이터를 데이터베이스에 저장하는 코드가 자동으로 추가되지 않습니다. 이 단원에서는 LINQ to SQL 개체에서 저장 단추를 사용하고 저장 기능을 구현하는 방법에 대해 설명합니다.
저장 기능을 구현하려면
디자인 뷰에서 Form1을 엽니다.
CustomerBindingNavigator에서 저장 단추(플로피 디스크 아이콘이 있는 단추)를 선택합니다.
속성 창에서 Enabled 속성을 True로 설정합니다.
저장 단추를 두 번 클릭하여 이벤트 처리기를 만들고 코드 편집기로 전환합니다.
저장 단추 이벤트 처리기에 다음 코드를 추가합니다.
NorthwindDataContext1.SubmitChanges()
northwindDataContext1.SubmitChanges();
업데이트(삽입, 업데이트 및 삭제)를 수행하기 위한 기본 동작 재정의
기본 업데이트 동작을 재정의하려면
O/R 디자이너에서 LINQ to SQL 파일을 엽니다. 솔루션 탐색기에서 Northwind.dbml 파일을 두 번 클릭합니다.
In Server Explorer/Database Explorer, expand the Northwind databases Stored Procedures node and locate the InsertCustomers, UpdateCustomers, and DeleteCustomers stored procedures.
세 개의 저장 프로시저를 모두 O/R 디자이너로 끌어 옵니다.
이러한 저장 프로시저가 메서드 창에 DataContext 메서드로 추가됩니다. 자세한 내용은 DataContext 메서드(O/R 디자이너)를 참조하십시오.
O/R 디자이너에서 Customer 엔터티 클래스를 선택합니다.
속성 창에서 Insert 속성을 선택합니다.
런타임 사용 옆의 줄임표(...) 를 클릭하여 동작 구성 대화 상자를 엽니다.
사용자 지정을 선택합니다
사용자 지정 목록에서 InsertCustomers 메서드를 선택합니다.
적용을 클릭하여 선택한 클래스 및 동작에 대한 구성을 저장합니다.
참고: 계속해서 클래스/동작 조합을 변경한 후 적용을 클릭하여 해당하는 각 조합에 대한 동작을 구성할 수 있습니다. 적용을 클릭하기 전에 클래스 또는 동작을 변경하면 변경 내용을 적용할지 묻는 경고 대화 상자가 나타납니다.
동작 목록에서 업데이트를 선택합니다.
사용자 지정을 선택합니다
사용자 지정 목록에서 UpdateCustomers 메서드를 선택합니다.
메서드 인수 및 클래스 속성 목록을 살펴보면 테이블의 일부 열에 두 개의 메서드 인수와 두 개의 클래스 속성이 있습니다. 이를 사용하면 손쉽게 변경 내용을 추적하고 동시성 위반을 확인하는 문을 만들 수 있습니다.
Original_CustomerID 메서드 인수를 CustomerID (Original) 클래스 속성에 매핑합니다.
참고: 기본적으로 메서드 인수는 이름이 일치하는 경우 클래스 속성에 매핑됩니다. 속성 이름이 변경되거나 더 이상 테이블 및 엔터티 클래스 간에 일치하지 않아 O/R 디자이너에서 올바른 매핑을 결정할 수 없는 경우에는 매핑할 해당하는 클래스 속성을 선택해야 합니다. 또한 메서드 인수를 매핑할 올바른 클래스 속성이 없는 경우 클래스 속성 값을 (없음)으로 설정할 수 있습니다.
적용을 클릭하여 선택한 클래스 및 동작에 대한 구성을 저장합니다.
동작 목록에서 삭제를 선택합니다.
사용자 지정을 선택합니다
사용자 지정 목록에서 DeleteCustomers 메서드를 선택합니다.
Original_CustomerID 메서드 인수를 CustomerID (Original) 클래스 속성에 매핑합니다.
확인을 클릭합니다.
참고: |
---|
이 연습에서는 문제가 되지 않지만 LINQ to SQL은 삽입 및 업데이트 과정에서 identity(자동 증분), rowguidcol(데이터베이스에서 생성된 GUID) 및 timestamp 열에 대해 데이터베이스에서 생성된 값을 자동으로 처리한다는 점을 기억할 필요가 있습니다. 데이터베이스에서 생성된 값이 다른 형식의 열에 있으면 null 값이라는 예기치 않은 결과가 발생합니다. 데이터베이스에서 생성된 값을 반환하려면 수동으로 IsDbGenerated를 true로 설정하고 AutoSync를 Always, OnInsert 또는 OnUpdate 중 하나로 설정해야 합니다. |
응용 프로그램 테스트
응용 프로그램을 다시 실행하여 UpdateCustomers 저장 프로시저가 데이터베이스에서 고객 레코드를 올바로 업데이트하는지 확인합니다.
응용 프로그램을 테스트하려면
F5 키를 누릅니다.
표에서 레코드를 수정하여 업데이트 동작을 테스트합니다.
새 레코드를 추가하여 삽입 동작을 테스트합니다.
저장 단추를 클릭하여 변경 내용을 데이터베이스에 다시 저장합니다.
폼을 닫습니다.
F5 키를 눌러 업데이트된 레코드와 새로 삽입한 레코드가 있는지 확인합니다.
3단계에서 만든 새 레코드를 삭제하여 삭제 동작을 테스트합니다.
저장 단추를 클릭하여 변경 내용을 전송하고 데이터베이스에서 삭제한 레코드를 제거합니다.
폼을 닫습니다.
F5 키를 눌러 삭제한 레코드가 데이터베이스에서 제거되었는지 확인합니다.
참고: 응용 프로그램에서 SQL Server Express Edition을 사용하는 경우 데이터베이스 파일의 출력 디렉터리로 복사 속성 값에 따라 10단계에서 F5 키를 누를 때 변경 내용이 표시되지 않을 수 있습니다. 자세한 내용은 방법: 프로젝트의 로컬 데이터 파일 관리를 참조하십시오.
다음 단계
응용 프로그램 요구 사항에 따라 LINQ to SQL 엔터티 클래스를 만든 후 몇 단계를 더 수행할 수도 있습니다. 이 응용 프로그램에서 보완할 수 있는 사항은 다음과 같습니다.
업데이트 동안 동시성 검사를 구현합니다. 자세한 내용은 낙관적 동시성 개요(LINQ to SQL)를 참조하십시오.
LINQ 쿼리를 추가하여 데이터를 필터링합니다. 자세한 내용은 LINQ 쿼리 소개를 참조하십시오.
참고 항목
작업
방법: 저장 프로시저를 할당하여 업데이트, 삽입 및 삭제 수행(O/R 디자이너)