ASP.NET과 함께 LINQ 사용
업데이트: 2007년 11월
LINQ(통합 언어 쿼리)를 웹 페이지에 사용하여 데이터를 검색하고 수정할 수 있습니다. LINQ는 관계형 데이터에 개체 지향 프로그래밍 원리를 적용합니다. LINQ에서는 여러 유형의 데이터 소스에서 데이터를 쿼리하기 위한 통합 프로그래밍 모델을 제공하고 데이터 기능을 직접 C# 및 Visual Basic 언어로 확장합니다. 자세한 내용은 LINQ(통합 언어 쿼리)를 참조하십시오.
LINQ는 LinqDataSource 컨트롤이나 ObjectDataSource 컨트롤을 통해 또는 LINQ 쿼리를 만드는 방식으로 사용할 수 있습니다.
웹 응용 프로그램에서 LINQ를 사용하는 경우 코드 액세스 보안에 대한 정책 파일을 변경해야 할 수 있습니다. 이러한 변경 사항은 이 항목의 뒷부분에 설명되어 있습니다.
LinqDataSource 컨트롤
LinqDataSource 컨트롤을 사용하면 데이터베이스의 데이터 또는 배열 등의 메모리 내 데이터 컬렉션에 손쉽게 연결할 수 있습니다. 데이터 검색, 필터링, 정렬, 그룹화 등과 같은 일반적인 시나리오에 필요한 모든 조건을 선언적으로 작성할 수 있습니다. 컨트롤은 선언적으로 제공하는 값에서 LINQ 쿼리를 동적으로 만듭니다.
또한 LINQ to SQL 데이터 컨텍스트 클래스의 데이터를 검색하는 경우에는 업데이트, 삽입 및 삭제 작업을 처리할 수 있도록 LinqDataSource 컨트롤을 구성할 수 있습니다. 이러한 작업을 수행하기 위한 SQL 명령을 작성하지 않아도 컨트롤에서 이 작업을 수행합니다.
웹 페이지에 데이터를 표시하려면 데이터 바인딩된 컨트롤을 LinqDataSource 컨트롤에 바인딩합니다. 데이터 바인딩된 컨트롤의 예로는 GridView 또는 DetailsView 컨트롤이 있습니다.
다음 예제에서는 AdventureWorks 데이터베이스에 연결하는 LinqDataSource 컨트롤의 태그를 보여 줍니다. 이 예제에서는 Contact 테이블에서 EmailPromotion 속성 값이 1인 레코드를 반환합니다.
<asp:LinqDataSource
ContextTypeName="AdventureWorksDataContext"
TableName="Contacts"
Where="EmailPromotion=1"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
자세한 내용은 LinqDataSource 웹 서버 컨트롤 개요를 참조하십시오.
ObjectDataSource 컨트롤
LinqDataSource 컨트롤을 사용하는 경우보다 복잡한 방식으로 데이터와 상호 작용하려는 경우에는 ObjectDataSource 컨트롤을 사용합니다. 예를 들어 조인된 테이블에 설정 값이 포함된 업데이트 메서드를 만들 수 있습니다.
ObjectDataSource 컨트롤은 LINQ to SQL 클래스와 함께 사용할 수 있습니다. 이렇게 하려면 TypeName 속성을 데이터 컨텍스트 클래스 이름으로 설정합니다. 또한 SelectMethod, UpdateMethod, InsertMethod 및 DeleteMethod 메서드를 데이터 컨텍스트 클래스에서 해당 작업을 수행하는 메서드로 설정합니다.
ObjectDataSource 컨트롤을 지연 쿼리 실행과 함께 사용하는 경우 데이터 컨텍스트 클래스의 삭제를 취소하려면 ObjectDisposing 이벤트에 대한 이벤트 처리기를 만들어야 합니다. 이 단계를 수행해야 하는 이유는 LINQ to SQL에서는 지연 실행을 지원하는 반면 ObjectDataSource 컨트롤에서는 Select 작업이 끝난 후 데이터 컨텍스트를 삭제하려고 하기 때문입니다.
LINQ 쿼리
데이터 소스 컨트롤을 사용하지 않고 LINQ 쿼리를 웹 페이지에 포함할 수 있습니다. LINQ 쿼리는 LinqDataSource 컨트롤에서 사용할 수 없는 쿼리 연산자를 사용해야 하는 경우에 사용할 수 있습니다. 또한 데이터 소스 컨트롤을 만드는 데 필요한 처리 과정 없이 데이터 바인딩된 컨트롤에서 읽기 전용 데이터를 표시하려는 경우에도 사용할 수 있습니다. LINQ 연산자에 대한 자세한 내용은 표준 쿼리 연산자 개요를 참조하십시오. LinqDataSource 컨트롤에서 사용할 수 있는 쿼리 연산자 목록을 보려면 LinqDataSource 웹 서버 컨트롤 개요를 참조하십시오.
다음 예제에서는 웹 페이지에 LINQ 쿼리를 포함하는 방법을 보여 줍니다. 이 예제에서는 쿼리 결과를 GridView 컨트롤에 표시합니다.
[Visual Basic]
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dataContext As AdventureWorksDataContext = _
New AdventureWorksDataContext()
Dim query = From contact In dataContext.Contacts _
Where contact.EmailPromotion = 1 _
Select contact
GridView1.DataSource = query
GridView1.DataBind()
End If
End Sub
[C#]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AdventureWorksDataContext dataContext =
new AdventureWorksDataContext();
var query = from contact in dataContext.Contacts
where contact.EmailPromotion==1
select contact;
GridView1.DataSource = query;
GridView1.DataBind();
}
}
LINQ 및 코드 액세스 보안
다음 단원에서는 보통 신뢰 및 높은 신뢰 수준에서 LINQ를 사용하는 방법에 대한 정보를 제공합니다.
보통 신뢰 수준으로 LINQ 사용
보통 신뢰 수준으로 실행되는 웹 응용 프로그램에서 LINQ를 사용하려면 Medium 신뢰에 대해 정의된 정책 파일에 두 개의 요소를 포함해야 합니다. 기본적으로 보통 신뢰에 대한 정책 파일은 web_mediumtrust.config 파일입니다.
SecurityClasses 요소 내에 다음과 같은 특성이 지정된 SecurityClass 요소를 추가합니다.
<SecurityClass
Name="ReflectionPermission"
Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
Name 특성이 "ASP.Net"으로 설정된 PermissionSet 요소 내에 다음과 같은 특성이 지정된 IPermission 요소를 추가합니다.
<IPermission
class="ReflectionPermission"
version="1"
Flags="RestrictedMemberAccess"
/>
![]() |
---|
이 요소는 설치 프로세스가 진행되는 동안 추가할 수 있습니다. |
높은 신뢰 수준으로 LINQ 사용
높은 신뢰 수준으로 실행되는 웹 응용 프로그램에서 LINQ를 사용하려면 High 신뢰에 대해 정의된 정책 파일에 요소 하나를 포함해야 합니다. 기본적으로 높은 신뢰에 대한 정책 파일은 web_hightrust.config 파일입니다. 이 파일은 이미 ReflectionPermission 클래스를 참조하는 PermissionsSet 요소 내에 IPermission 요소가 포함되어 있습니다. LINQ를 사용할 때는 이 요소를 수정해야 합니다.
Name 특성이 "ASP.Net"으로 설정된 PermissionSet 요소 내에서 ReflectionPermission에 대한 IPermission 요소를 찾아 다음과 같이 설정합니다.
<IPermission
class="ReflectionPermission"
version="1"
Flags="ReflectionEmit, RestrictedMemberAccess"
/>
![]() |
---|
이 요소는 설치 프로세스가 진행되는 동안 수정할 수 있습니다. |