연습: 간단한 개체 모델 및 쿼리(C#)

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

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

참고 항목

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

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

필수 조건

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

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

개요

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

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

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

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

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

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

  • 쿼리 실행 및 결과 검토

LINQ to SQL 솔루션 만들기

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

LINQ to SQL 솔루션을 만들려면

  1. Visual Studio파일 메뉴에서 새로 만들기를 가리킨 다음, 프로젝트를 클릭합니다.

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

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

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

  5. 위치 상자에서 프로젝트 파일을 저장할 위치를 확인합니다.

  6. 확인을 클릭합니다.

LINQ 참조 및 지시문 추가

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

System.Data.Linq를 추가하려면

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

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

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

  3. Program.cs 맨 위에 다음 지시문을 추가합니다.

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

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

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

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

  • 다음 코드를 Program.cs에서 Program 클래스 선언 바로 위에 입력하거나 붙여넣습니다.

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

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

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

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

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

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

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

  • 다음 코드를 Program.cs에서 Customer 클래스의 중괄호 내에 입력하거나 붙여넣습니다.

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    

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

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

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

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

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

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

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<Customer>();
    

단순 쿼리 작성

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

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

단순 쿼리를 작성하려면

  • 다음 코드를 Main 메서드에서 Table<Customer> 선언 뒤에 입력하거나 붙여넣습니다.

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in Customers
        where cust.City == "London"
        select cust;
    

쿼리 실행

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

쿼리를 실행하려면

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

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. F5 키를 눌러 애플리케이션을 디버그합니다.

    참고 항목

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

    콘솔 창의 쿼리 결과는 다음과 같습니다.

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. 콘솔 창에서 Enter 키를 눌러 애플리케이션을 닫습니다.

다음 단계

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

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

참고 항목