오늘날 많은 비즈니스 개발자는 비즈니스 논리 및 프레젠테이션 계층(예: Visual C# 또는 Visual Basic)에 대한 개략적인 언어와 데이터베이스와 상호 작용하는 쿼리 언어(예: Transact-SQL)의 두 개 이상의 프로그래밍 언어를 사용해야 합니다. 이렇게 하려면 개발자가 여러 언어에 능숙해야 하며 개발 환경에서 언어 불일치가 발생합니다. 예를 들어 데이터 액세스 API를 사용하여 데이터베이스에 대해 쿼리를 실행하는 애플리케이션은 따옴표를 사용하여 쿼리를 문자열 리터럴로 지정합니다. 이 쿼리 문자열은 컴파일러에서 읽을 수 없으며 잘못된 구문 또는 참조하는 열 또는 행이 실제로 존재하는지 여부와 같은 오류를 확인하지 않습니다. 쿼리 매개 변수에 대한 형식 검사가 없으며 IntelliSense
지원도 없습니다.
LINQ(Language-Integrated Query)를 사용하면 개발자가 별도의 쿼리 언어를 사용하지 않고도 애플리케이션 코드에서 집합 기반 쿼리를 구성할 수 있습니다. 메모리 내 데이터 구조, XML 문서, SQL 데이터베이스 및 IEnumerable 개체와 같은 다양한 열거 가능한 데이터 원본(즉, 인터페이스를 구현 DataSet 하는 데이터 원본)에 대해 LINQ 쿼리를 작성할 수 있습니다. 이러한 열거 가능한 데이터 원본은 다양한 방법으로 구현되지만 모두 동일한 구문 및 언어 구문을 노출합니다. 쿼리는 프로그래밍 언어 자체에서 형성될 수 있으므로 컴파일러에서 이해하거나 확인할 수 없는 문자열 리터럴로 포함된 다른 쿼리 언어를 사용할 필요가 없습니다. 또한 쿼리를 프로그래밍 언어에 통합하면 컴파일 시간 형식 및 구문 검사를 제공하여 Visual Studio 프로그래머의 생산성을 높일 수 있습니다 IntelliSense
. 이러한 기능은 쿼리 디버깅 및 오류 수정의 필요성을 줄입니다.
SQL 테이블에서 메모리의 개체로 데이터를 전송하는 것은 종종 지루하고 오류가 발생하기 쉽습니다. LINQ to DataSet 및 LINQ to SQL에 의해 구현된 LINQ 공급자는 원본 데이터를 IEnumerable 기반 개체 컬렉션으로 변환합니다. 프로그래머가 쿼리할 때와 업데이트할 때 항상 데이터를 컬렉션으로 IEnumerable 간주합니다. 이러한 컬렉션에 대한 쿼리를 작성하기 위한 모든 IntelliSense
지원이 제공됩니다.
LINQ(ADO.NET Language-Integrated Query) 기술에는 LINQ to DataSet, LINQ to SQL 및 LINQ to Entities의 세 가지 기술이 있습니다. LINQ to DataSet은 DataSet에 대해 더 풍부하고 최적화된 쿼리를 제공하며, LINQ to SQL은 SQL Server 데이터베이스 스키마를 직접 쿼리할 수 있게 하고, LINQ to Entities는 엔터티 데이터 모델을 쿼리할 수 있게 해줍니다.
다음 다이어그램에서는 ADO.NET LINQ 기술이 고급 프로그래밍 언어 및 LINQ 지원 데이터 원본과 어떻게 관련되는지에 대한 개요를 제공합니다.
LINQ에 대한 자세한 내용은 LINQ(Language Integrated Query)를 참조하세요.
다음 섹션에서는 LINQ to DataSet, LINQ to SQL 및 LINQ to Entities에 대한 자세한 정보를 제공합니다.
LINQ to DataSet (LINQ를 사용하여 DataSet과 연결)
ADO.NET은 연결이 끊긴 프로그래밍 모델의 핵심 요소인 DataSet로, 널리 사용됩니다. LINQ to DataSet을 사용하면 개발자가 다른 많은 데이터 원본에서 DataSet 사용할 수 있는 동일한 쿼리 공식 메커니즘을 사용하여 더 풍부한 쿼리 기능을 빌드할 수 있습니다. 자세한 내용은 LINQ to DataSet을 참조하세요.
LINQ to SQL
LINQ to SQL은 개념적 모델에 매핑할 필요가 없는 개발자에게 유용한 도구입니다. LINQ to SQL을 사용하면 기존 데이터베이스 스키마에 직접 LINQ 프로그래밍 모델을 사용할 수 있습니다. LINQ to SQL을 사용하면 개발자가 데이터를 나타내는 .NET Framework 클래스를 생성할 수 있습니다. 이러한 생성된 클래스는 개념적 데이터 모델에 매핑하는 대신 데이터베이스 테이블, 뷰, 저장 프로시저 및 사용자 정의 함수에 직접 매핑됩니다.
LINQ to SQL을 사용하면 개발자는 XML과 같은 다른 데이터 원본 외에도 메모리 내 컬렉션과 DataSet동일한 LINQ 프로그래밍 패턴을 사용하여 스토리지 스키마에 대해 직접 코드를 작성할 수 있습니다. 자세한 내용은 LINQ to SQL을 참조하세요.
LINQ to Entities(엔터티에 대한 LINQ)
대부분의 애플리케이션은 현재 관계형 데이터베이스 위에 작성됩니다. 어떤 시점에서 이러한 애플리케이션은 관계형 형식으로 표시된 데이터와 상호 작용해야 합니다. 데이터베이스 스키마가 애플리케이션을 빌드하는 데 항상 이상적인 것은 아니며, 애플리케이션의 개념적 모델은 데이터베이스의 논리 모델과 동일하지 않습니다. 엔터티 데이터 모델은 애플리케이션이 데이터와 개체로 상호 작용할 수 있도록 특정 도메인의 데이터를 모델링하는 데 사용할 수 있는 개념적 데이터 모델입니다. 자세한 내용은 ADO.NET Entity Framework를 참조하세요.
엔터티 데이터 모델을 통해 관계형 데이터는 .NET 환경에서 개체로 노출됩니다. 이렇게 하면 개체 계층이 LINQ 지원에 이상적인 대상이 되므로 개발자는 비즈니스 논리를 빌드하는 데 사용되는 언어로 데이터베이스에 대한 쿼리를 작성할 수 있습니다. 이 기능을 LINQ to Entities라고 합니다. 자세한 내용은 LINQ to Entities를 참조하세요.