다음을 통해 공유


연습: 엔터티 클래스에 유효성 검사 추가

데이터 유효성 검사는 데이터 개체에 입력된 값이 응용 프로그램에 설정된 규칙 및 개체 스키마의 제약 조건을 따르는지 확인하는 과정입니다. 업데이트를 내부 데이터베이스에 보내기 전에 데이터의 유효성을 검사하면 응용 프로그램과 데이터베이스 간에 발생할 수 있는 오류 및 잠재적 라운드트립 횟수를 줄일 수 있습니다.

O/R 디자이너(개체 관계형 디자이너)에서는 전체 엔터티를 삽입, 업데이트 및 삭제하는 동안, 각 열을 변경하는 동안 및 각 열을 변경한 후에 실행되는 디자이너에서 생성한 코드를 확장할 수 있는 부분 메서드(Partial Method)를 제공합니다.

이 연습에서는 유효성 검사를 LINQ to SQL 엔터티 클래스에 추가하는 단계별 지침을 제공하며 연습: LINQ to SQL 클래스 만들기(O/R 디자이너) 항목에 대해서도 다룹니다.

이 연습을 통해 다음과 같은 작업을 수행하는 방법을 배웁니다.

  • 변경 내용에 대한 유효성 검사를 특정 열의 데이터에 추가

  • 업데이트에 대한 유효성 검사를 전체 엔터티에 추가

사전 요구 사항

이 연습을 완료하려면 다음이 필요합니다.

참고

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

ORDesignerWalkthrough 솔루션 열기

ORDesignerWalkthrough 솔루션을 열려면

변경 내용에 대한 유효성 검사를 특정 열의 값에 추가

이 연습 부분에서는 유효성 검사 논리를 주문의 RequiredDate 열에 추가하게 됩니다. RequiredDate가 현재 날짜보다 이전인지 확인하는 코드를 추가합니다. 유효성 검사는 사용자 인터페이스 대신 실제 클래스 정의에서 수행되기 때문에 값에 대한 유효성 검사가 실패하면 예외가 throw됩니다.

열의 값을 변경하는 동안 데이터의 유효성을 검사하려면

  1. O/R 디자이너에서 Northwind.dbml 파일을 엽니다. 솔루션 탐색기에서 Northwind.dbml 파일을 두 번 클릭합니다.

  2. 유효성 검사를 주문의 RequiredDate에 추가하는 중이므로 디자이너에서 Order 클래스를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

    코드 편집기가 주문의 partial 클래스와 함께 열립니다.

  3. 커서를 partial Order 클래스에 놓습니다.

  4. Visual Basic 프로젝트의 경우:

    1. **(선언)**이라 표시된 콤보 상자인 메서드 이름 목록을 확장합니다.

    2. OnRequiredDateChanging을 클릭합니다.

    3. OnRequiredDateChanging 메서드가 partial Order 클래스에 추가됩니다.

    4. 다음 코드를 OnRequiredDataChanging 메서드 안에 추가하여 RequiredDate에 입력된 값이 현재 날짜보다 빠르지 않도록 합니다.

      If value.HasValue Then
          If value < Today Then
              Throw New Exception("Required Date cannot be in the past")
          End If
      End If
      

    C# 프로젝트의 경우:

    1. 다음 코드를 partial Order 클래스에 추가하여 RequiredDate에 입력된 값이 현재 날짜보다 빠르지 않도록 합니다.

      partial void OnRequiredDateChanging(System.DateTime? value)
      {
          if (value < System.DateTime.Today)
          {
              throw new System.Exception("Required Date cannot be in the past");
          }
      }
      

응용 프로그램 테스트

유효성 검사 논리를 테스트하려면 응용 프로그램을 실행하고 유효성 검사가 실패하도록 하는 값을 입력해야 합니다.

응용 프로그램을 테스트하려면

  1. F5 키를 누릅니다.

  2. 주문이 표시된 표에서 주문의 RequiredDate를 현재 날짜보다 빠른 날짜로 변경하고 레코드에서 빠져 나와서 변경 내용을 적용합니다.

    새 값에 대한 유효성 검사는 실패하고 예상대로 예외가 thrown됩니다.

  3. 폼을 닫아 디버깅을 중지합니다.

DataGridView에서 유효성 검사 오류 처리

응용 프로그램을 테스트하면 DataError 이벤트를 처리하도록 개발자에게 지시하는 DataGridView에서 오류 메시지가 발생합니다. 다음 절차에서는 이 이벤트를 처리하는 방법을 보여 줍니다.

DataGridView에서 유효성 검사 오류를 처리하려면

  1. 코드 편집기에서 Form1을 엽니다.

  2. OrdersDataGridView를 선택합니다.

  3. DataError 이벤트에 대한 이벤트 처리기를 만듭니다.

  4. 오류를 표시할 코드를 추가합니다. 이벤트 처리기는 다음과 같습니다.

    Private Sub OrdersDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles OrdersDataGridView.DataError
        MessageBox.Show(e.Exception.Message)
    End Sub
    
    private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
    {
        MessageBox.Show(e.Exception.Message);
    }
    

업데이트에 대한 유효성 검사를 엔터티 클래스에 추가

변경하는 동안 값을 검사하는 작업 이외에도 전체 엔터티 클래스에 대해 업데이트를 시도할 때 데이터의 유효성을 검사할 수 있습니다. 비즈니스 규칙에서 여러 열의 값에 대한 비교를 요구하는 경우 업데이트를 시도하는 동안 유효성 검사를 실행하면 이 작업을 수행합니다. 예를 들어 다음 절차에서는 운송비가 설정된 한계보다 적은 경우 올바른 선적 회사가 사용되었는지를 확인하는 방법을 보여 줍니다.

엔터티 클래스에 대한 업데이트 동안 데이터의 유효성을 검사하려면

  1. O/R 디자이너에서 Northwind.dbml 파일을 엽니다. 솔루션 탐색기에서 Northwind.dbml 파일을 두 번 클릭합니다.

  2. 유효성 검사를 전체 Order 클래스의 업데이트에 추가하는 중이므로 액세스해야 하는 부분 메서드는 생성된 DataContext 클래스(NorthwindDataContext)에 위치합니다. O/R 디자이너에서 빈 영역을 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

    NorthwindDataContext의 partial 클래스에 코드 편집기가 열립니다.

  3. 커서를 NorthwindDataset partial 클래스에 놓습니다.

  4. Visual Basic 프로젝트의 경우:

    1. **(선언)**이라 표시된 콤보 상자인 메서드 이름 목록을 확장합니다.

    2. UpdateOrder를 클릭합니다.

    3. UpdateOrder 메서드가 partial NorthwindDataContext 클래스에 추가됩니다.

    4. Freight 값이 10보다 작으면 Federal Shipping이 배달되지 않습니다. 따라서 다음 코드를 UpdateOrder 메서드 내에 추가하여 Freight 값이 10보다 작은 경우 ShipVia에 입력된 값이 Federal Shipping이 되지 않도록 합니다.

      If (instance.ShipVia = 3) And (instance.Freight < 10) Then
          Dim ErrorMessage As String = "Federal Shipping " & _
           "does not deliver for less than 10. " & _
           "You must use a different shipper."
          Throw New Exception(ErrorMessage)
      End If
      

    C# 프로젝트의 경우:

    1. 다음 코드를 partial NorthwindDataContext 클래스에 추가하여 Freight 값이 0보다 작은 경우 ShipVia에 입력된 값이 Federal Shipping이 되지 않도록 합니다.

      partial void UpdateOrder(Order instance)
      {
          if ((instance.ShipVia == 3) && (instance.Freight < 10))
          {
              string ErrorMessage = "Federal Shipping " +
                  "does not deliver for less than 10. " +
                  "You must use a different shipper.";
              throw new System.Exception(ErrorMessage);
          }
      }
      

응용 프로그램 테스트

유효성 검사 논리를 테스트하려면 응용 프로그램을 실행하고 유효성 검사가 실패하도록 하는 값을 입력합니다.

응용 프로그램을 테스트하려면

  1. F5 키를 누릅니다.

  2. 주문이 표시된 표에서 ShipVia3인 레코드를 찾습니다. Freight를 5로 변경하고 레코드를 빠져 나와서 변경 내용을 적용합니다.

    레코드가 업데이트를 위해 실제로 전송되지 않으면 유효성 검사가 수행되지 않기 때문에 유효성 검사의 실패를 아직은 확인할 수 없습니다.

  3. 폼에 있는 Save 단추를 클릭합니다.

    이 경우 유효성 검사가 실패하고 예외가 thrown됩니다.

  4. 폼을 닫아 디버깅을 중지합니다.

다음 단계

응용 프로그램 요구 사항에 따라 LINQ to SQL 엔터티 클래스에 유효성 검사를 추가한 후 몇 단계를 더 수행해야 할 수도 있습니다. 이 응용 프로그램에서 보완할 수 있는 사항은 다음과 같습니다.

  • 더 많은 LINQ 쿼리를 만들어 데이터 정렬 및 필터링. 자세한 내용은 LINQ to SQL 쿼리를 참조하십시오.

참고 항목

작업

연습: LINQ to SQL 클래스 만들기(O/R 디자이너)

개념

데이터 응용 프로그램 개발의 새로운 기능

LINQ to SQL 쿼리

기타 리소스

O/R 디자이너(개체 관계형 디자이너)

LINQ to SQL

LINQ to SQL Walkthroughs