프로그래밍/C#

LINQ to SQL: C#에서 데이터베이스를 다루는 혁신적인 방법

shimdh 2025. 9. 13. 08:42
728x90

LINQ to SQL은 C# 개발자들에게 데이터베이스와의 상호작용을 단순화하고 효율적으로 만들어주는 강력한 도구입니다. 이 블로그 포스트에서는 LINQ to SQL의 주요 개념과 실용적인 사용 예제를 통해 이 기술이 어떻게 개발자들의 생산성을 높이고 오류를 줄이는지 알아보겠습니다.

LINQ to SQL의 주요 개념

객체-관계 매핑(ORM)

  • LINQ to SQL은 .NET 클래스와 데이터베이스 테이블을 매핑하는 ORM 프레임워크로 작동합니다.
  • 각 클래스는 데이터베이스의 테이블에 해당하며, 이러한 클래스의 속성은 열을 나타냅니다.

DataContext

  • DataContext 클래스는 LINQ to SQL에서 중심적인 역할을 하며, 애플리케이션과 데이터베이스 간의 다리 역할을 합니다.
  • 연결 문자열을 관리하고, 작업 중에 발생하는 변경 사항을 추적합니다.

데이터 쿼리

  • 쿼리는 쿼리 구문(SQL과 유사) 또는 메서드 구문(확장 메서드 사용)을 사용하여 작성할 수 있습니다.

지연 실행

  • 쿼리는 열거될 때까지 실행되지 않으며, 즉각적인 실행 없이 효율적인 쿼리 빌딩을 가능하게 합니다.

변경 추적

  • DataContext를 통해 수행된 모든 수정 사항은 쉽게 추적되고 최소한의 노력으로 데이터베이스에 저장될 수 있습니다.
728x90

실용적인 예: LINQ to SQL 사용하기

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

CREATE TABLE Books (
    Id INT PRIMARY KEY,
    Title NVARCHAR(100),
    Author NVARCHAR(100),
    PublishedYear INT
);
public class Book {
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public int PublishedYear { get; set; }
}

DataContext 생성

using System.Data.Linq;

public class BookContext : DataContext {
    public Table<Book> Books;

    public BookContext(string connectionString) : base(connectionString) {}
}

데이터 검색

  • 메서드 구문 사용:
  • using (var context = new BookContext("YourConnectionString")) { var booksByAuthor = context.Books.Where(b => b.Author == "J.K. Rowling").ToList(); foreach(var book in booksByAuthor) { Console.WriteLine($"{book.Title} by {book.Author}"); } }
  • 쿼리 구문 사용:
  • using (var context = new BookContext("YourConnectionString")) { var booksByAuthor = from book in context.Books where book.Author == "J.K. Rowling" select book; foreach(var book in booksByAuthor) { Console.WriteLine($"{book.Title} by {book.Author}"); } }

데이터 삽입

using (var context = new BookContext("YourConnectionString")) {
     var newBook = new Book() {
         Title = "Harry Potter and the Sorcerer's Stone",
         Author = "J.K. Rowling",
         PublishedYear = 1997 
     };

     context.Books.InsertOnSubmit(newBook);
     context.SubmitChanges();
}

데이터 업데이트

using (var context = new BookContext("YourConnectionString")) {
     var bookToUpdate = context.Books.First(b => b.Id == 1);

     bookToUpdate.PublishedYear = 2000;
     context.SubmitChanges();
}

데이터 삭제

using (var context = new BookContext("YourConnectionString")) {
      var bookToDelete = context.Books.First(b => b.Id == 1);

      if(bookToDelete != null){
          context.Books.DeleteOnSubmit(bookToDelete);
          context.SubmitChanges();
      } 
}

결론

LINQ to SQL은 C# 내에서 관계형 데이터베이스 작업 시 데이터 액세스를 크게 단순화합니다. 강력한 형식과 전통적인 SQL 언어에서 발견되는 친숙한 쿼리 패턴을 활용함으로써, 개발자들은 원시 ADO.NET 호출이나 다른 형태의 데이터 액세스 기술과 관련된 보일러플레이트 코드를 최소화하면서 강력함과 유연성을 얻습니다. 이러한 개념을 이해하면 애플리케이션 내에서 복잡한 데이터 상호작용을 효과적으로 관리할 수 있는 필수 도구를 제공받게 됩니다!

728x90