다음을 통해 공유


연습: 간단한 개체 모델 및 쿼리(Visual Basic)

이 연습에서는 간단한 기본 엔드투엔드 LINQ to SQL 시나리오에 대해 설명합니다. 샘플 Northwind 데이터베이스의 Customers 테이블을 모델링하는 엔터티 클래스를 만듭니다. 그런 다음 단순 쿼리를 만들어 London에 있는 고객을 나열합니다.

이 연습은 LINQ to SQL 개념을 보여 주기 위한 코드를 중심으로 디자인되었습니다. 일반적으로 개체 관계형 디자이너를 사용하여 개체 모델을 만듭니다.

참고 항목

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

이 연습은 Visual Basic 개발 설정을 사용하여 작성했습니다.

필수 조건

  • 이 연습에서는 파일을 저장하기 위해 전용 폴더("c:\linqtest")가 사용됩니다. 연습을 시작하기 전에 먼저 이 폴더를 만듭니다.

  • 이 연습을 수행하려면 Northwind 샘플 데이터베이스가 있어야 합니다. 이 데이터베이스가 개발 컴퓨터에 없는 경우 Microsoft 다운로드 사이트에서 다운로드할 수 있습니다. 지침은 샘플 데이터베이스 다운로드를 참조하세요. 이 데이터베이스를 다운로드한 후 파일을 c:\linqtest 폴더에 복사합니다.

개요

이 연습은 다음과 같은 여섯 가지 주요 작업으로 구성됩니다.

  • Visual Studio에서 LINQ to SQL 솔루션 만들기

  • 데이터베이스 테이블에 클래스 매핑

  • 데이터베이스 열을 나타내도록 클래스의 속성 지정

  • Northwind 데이터베이스에 대한 연결 지정

  • 데이터베이스에 대해 실행할 단순 쿼리 만들기

  • 쿼리 실행 및 결과 검토

LINQ to SQL 솔루션 만들기

이 첫 번째 작업에서는 LINQ to SQL 프로젝트를 빌드하고 실행하는 데 필요한 참조가 포함된 Visual Studio 솔루션을 만듭니다.

LINQ to SQL 솔루션을 만들려면

  1. 파일 메뉴에서 새 프로젝트를 클릭합니다.

  2. 새 프로젝트 대화 상자의 프로젝트 형식 창에서 Visual Basic을 클릭합니다.

  3. 템플릿 창에서 콘솔 애플리케이션을 클릭합니다.

  4. 이름 상자에 LinqConsoleApp을 입력합니다.

  5. 확인을 클릭합니다.

LINQ 참조 및 지시문 추가

이 연습에서는 프로젝트에 기본적으로 설치되어 있지 않을 수 있는 어셈블리를 사용합니다. System.Data.Linq가 프로젝트에 참조로 나열되지 않은 경우(솔루션 탐색기모든 파일 표시를 클릭하고 참조 노드 확장) 다음 단계에 설명된 대로 추가합니다.

System.Data.Linq를 추가하려면

  1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭한 다음, 참조 추가를 클릭합니다.

  2. 참조 추가 대화 상자에서 .NET을 클릭하고, System.Data.Linq 어셈블리를 클릭한 다음, 확인을 클릭합니다.

    어셈블리가 프로젝트에 추가됩니다.

  3. 또한 참조 추가 대화 상자에서 .NET을 클릭하고, System.Windows.Forms로 스크롤하여 이를 클릭한 다음, 확인을 클릭합니다.

    연습에서 메시지 상자를 지원하는 어셈블리가 프로젝트에 추가됩니다.

  4. Module1 위에 다음 지시문을 추가합니다.

    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
    Imports System.Windows.Forms
    
    

데이터베이스 테이블에 클래스 매핑

이 단계에서는 클래스를 생성하여 데이터베이스 테이블에 매핑합니다. 해당 클래스를 엔터티 클래스라고 합니다. 매핑을 수행하려면 TableAttribute 특성을 추가하면 됩니다. Name 속성은 데이터베이스의 테이블 이름을 지정합니다.

엔터티 클래스를 만들어 데이터베이스 테이블에 매핑하려면

  • 다음 코드를 Sub Main 바로 위에 있는 Module1.vb에 입력하거나 붙여넣습니다.

    <Table(Name:="Customers")> _
    Public Class Customer
    End Class
    

데이터베이스 열을 나타내도록 클래스의 속성 지정

이 단계에서는 다음과 같은 몇 가지 작업을 수행합니다.

  • ColumnAttribute 특성을 사용하여 데이터베이스 테이블의 열을 나타내도록 엔터티 클래스의 CustomerIDCity 속성을 지정합니다.

  • 데이터베이스의 기본 키 열을 나타내도록 CustomerID 속성을 지정합니다.

  • 전용 스토리지에 _CustomerID_City 필드를 지정합니다. 그러면 LINQ to SQL에서 비즈니스 논리가 포함된 퍼블릭 접근자를 사용하는 대신 값을 직접 저장하고 검색할 수 있습니다.

두 데이터베이스 열의 특징을 나타내려면

  • 다음 코드를 End Class 바로 앞의 Module1.vb에 입력하거나 붙여넣습니다.

    Private _CustomerID As String
    <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _
    Public Property CustomerID() As String
        Get
            Return Me._CustomerID
        End Get
        Set(ByVal value As String)
            Me._CustomerID = value
        End Set
    End Property
    
    Private _City As String
    <Column(Storage:="_City")> _
    Public Property City() As String
        Get
            Return Me._City
        End Get
        Set(ByVal value As String)
            Me._City = value
        End Set
    End Property
    

Northwind 데이터베이스에 대한 연결 지정

이 단계에서는 DataContext 개체를 사용하여 코드 기반 데이터 구조체와 데이터베이스 자체 간의 연결을 설정할 수 있습니다. DataContext는 데이터베이스에서 개체를 검색하고 변경 내용을 전송할 때 사용하는 기본 채널입니다.

또한 Table(Of Customer)이 데이터베이스의 Customers 테이블에 대한 쿼리에 대해 형식화된 논리적 테이블로 사용되도록 선언합니다. 이후 단계에서 이러한 쿼리를 만들고 실행합니다.

데이터베이스 연결을 지정하려면

  • 다음 코드를 Sub Main 메서드에 입력하거나 붙여넣습니다.

    northwnd.mdf 파일은 linqtest 폴더 내에 있는 것으로 간주합니다. 자세한 내용은 이 연습 앞부분의 사전 요구 사항 단원을 참조하세요.

    ' Use a connection string.
    Dim db As New DataContext _
        ("c:\linqtest\northwnd.mdf")
    
    ' Get a typed table to run queries.
    Dim Customers As Table(Of Customer) = _
        db.GetTable(Of Customer)()
    

단순 쿼리 작성

이 단계에서는 데이터베이스 Customers 테이블에서 London에 있는 고객을 찾는 쿼리를 만듭니다. 이 단계의 쿼리 코드는 쿼리를 설명하기만 하고 실행하지는 않습니다. 이 접근 방식을 지연된 실행이라고 합니다. 자세한 내용은 LINQ 쿼리 소개(C#)를 참조하세요.

또한 LINQ to SQL에서 생성하는 SQL 명령을 보여 주는 로그 출력을 만듭니다. Log를 사용하는 이 로깅 기능은 디버깅할 때와 데이터베이스로 전송되는 명령이 쿼리를 정확히 나타내는지 확인할 때 유용합니다.

단순 쿼리를 작성하려면

  • 다음 코드를 Sub Main 선언 뒤의 Table(Of Customer) 메서드에 입력하거나 붙여넣습니다.

    ' Attach the log to show generated SQL in a console window.
    db.Log = Console.Out
    
    ' Query for customers in London.
    Dim custQuery = _
        From cust In Customers _
        Where cust.City = "London" _
        Select cust
    

쿼리 실행

이 단계에서는 실제로 쿼리를 실행합니다. 앞의 단계에서 만든 쿼리 식은 결과가 필요할 때까지 계산되지 않습니다. For Each 반복을 시작하면 데이터베이스에 대해 SQL 명령이 실행되고 개체가 구체화됩니다.

쿼리를 실행하려면

  1. 다음 코드를 쿼리 설명 뒤 Sub Main 메서드의 끝에 입력하거나 붙여넣습니다.

    ' Format the message box.
    Dim msg As String = "", title As String = "London customers:", _
        response As MsgBoxResult, style As MsgBoxStyle = _
        MsgBoxStyle.Information
    
    ' Execute the query.
    For Each custObj In custQuery
        msg &= String.Format(custObj.CustomerID & vbCrLf)
    Next
    
    ' Display the results.
    response = MsgBox(msg, style, title)
    
  2. F5 키를 눌러 애플리케이션을 디버그합니다.

    참고 항목

    애플리케이션에서 런타임 오류가 발생하면 연습으로 학습의 문제 해결 섹션을 참조하세요.

    메시지 상자에 여섯 명의 고객이 나열됩니다. 콘솔 창에 생성된 SQL 코드가 표시됩니다.

  3. 확인을 클릭하여 메시지 상자를 닫습니다.

    애플리케이션을 닫습니다.

  4. 파일 메뉴에서 모두 저장을 클릭합니다.

    다음 연습을 계속하려면 이 애플리케이션이 필요합니다.

다음 단계

연습: 관계 간 쿼리(Visual Basic) 항목에서 계속해서 연습을 완료할 수 있습니다. 관계 간 쿼리 연습에서는 LINQ to SQL가 관계형 데이터베이스의 조인과 유사하게 테이블 간에 쿼리하는 방법을 보여 줍니다.

관계 간 쿼리 연습을 수행하려면 지금까지 완료한 연습에 대한 솔루션을 저장해야 합니다.

참고 항목