본문 바로가기

Programming/.NET

[ASP.NET] EntityDataSource

EntityDataSource 컨트롤은 ADO.NET Entity Framework 를 사용시 데이터를 다루기 위한 전용의 데이터 컨트롤로서 EDM(Entity Data Model)을 통해 데이터를 다루게 됩니다.

EntityDataSource 컨트롤을 간단히 사용해 보기 위해 우선 데이터의 소스역활을 하는 EDM을 만들어야 합니다. 다만 EDM과 관련된 상세사항은 추후에 자세히 알아보기로 하고 여기서는 그냥 생성방법만을 알아보고자 합니다.

프로젝트에서 EntityDataModel 라는 폴더를 하나 만들고 해당 폴더에 마우스 오른쪽 버튼을 눌러 Add -> New Item 을 선택합니다.


위 화면에서 Data 카테고리를 선택하고 ADO.NET Entity Data Model 항목을 생성합니다. 예제에서는 test.edmx 로 하였습니다.


Generate from database 를 선택하고 Next 버튼을 누릅니다.


연결할 데이터 베이스를 선택하고 Next 버튼을 누릅니다. 화면상에 AdventureWorks2012ConnectionString 은 프로젝트의 Web.config 파일에 존재하는 데이터베이스 연결 설정입니다. Web.config 파일에 DB연결 관련 설정이 존재하지 않고 아무것도 선택할 수 없으면 New Connection 을 눌러 새로운 연결설정을 구성하도록 합니다.


EDM 안에 생성할 Entity 를 선택합니다. Entity는 프로시저(Procedure)나 테이블(Table)등이 올 수 있습니다. 선택이 완료되면 Finish 를 눌러 설정을 마칩니다.


지금까지의 과정을 거치고 나면 프로젝트에 edmx 파일이 생성되며 더불어 Web.Config 파일도 관련 내용이 추가됩니다.

EDM 을 생성하였으므로 이제 EDM과 EntityDataSource 컨트롤을 연결해 보겠습니다. 우선 아래와 같이 EntityDataSource 컨트롤을 WebForm 에 추가하고 스마트태그를 통해 설정마법사를 호출합니다.


▶ <그림 1-1>

그림 1-1 설정화면에서 Named Connection 부분을 클릭해 방금전 추가한 EDM 이름을 선택합니다. 다만 이때 다음과 같은 오류가 발생하는 경우


프로젝트에 있는 edmx 파일을 메모장으로 열어


ProviderManifestToken 부분의 2012를 2008로 바꿔주시기 바랍니다. 그리고 난뒤 프로젝트를 다시 빌드하고 그림 1-1 화면에서 생성한 EDM을 선택하면 정상적으로 DefaultContainerName 가 표시될 것입니다.


Named Connection 을 선택하고 Next 버튼을 누르면

▶ <그림 1-2>

생성할 Entity 설정화면을 볼 수 있습니다. EntitySetName 에 EDM 설정시 사용했던 테이블이름을 선택하고 Choose the properties in the query result 의 항목을 통해 어떤 항목을 표시할지 지정합니다. 이 때 데이터를 특정 타입으로서 반환되도록 하고 싶다면 EntityTypeFilter 를 통해 타입으로 반환될 항목을 선택합니다.

EntityDataSource 컨트롤은 예를 들어 데이터 컨트롤에 바인딩되어 해당 컨트롤에서 데이터가 추가되거나 변경, 삭제되는 경우에 자동적으로 데이터에 대한 Insert, Update, Delete 가 수행될 수 있습니다. 이런 처리를 설정하고자 한다면 필요한 Enable 항목을 체크하십시오. 다만 이 기능을 이용하려면 Choose the properties in the query result 에서 Select All (Entity Value) 항목만이 체크된 상태여야 합니다.

마지막으로 Finish 를 누르면 모든 설정과정이 완료되며 데이터 컨트롤에 바인딩할 수 있는 준비가 이루어 집니다. <코드 1-1>은 EntityDataSource 를 GridView 데이터 컨트롤에 바인딩한 예제를 보여주고 있습니다.
<form id="form1" runat="server">
<div>
    <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=AdventureWorks2012Entities" DefaultContainerName="AdventureWorks2012Entities" EnableFlattening="False" EntitySetName="Product" Select="it.[ProductID], it.[Name], it.[ProductNumber]"></asp:EntityDataSource>
    <asp:GridView ID="GridView1" runat="server" DataSourceID="EntityDataSource1"></asp:GridView>
</div>
</form>
참고로 컨트롤의 Select 속성을 통하여 ProductID, Name, ProductNumber 이 세가지 Column 이 표시되도록 하였는데 다른 형태의 Select 구문이 필요한 상황이라면 CommandText 속성을 사용하여 다음과 같이 임의의 쿼리를 지정하여 사용하면 됩니다.
<asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=AdventureWorks2012Entities" DefaultContainerName="AdventureWorks2012Entities" EnableFlattening="False" CommandText="Select P.ProductID, P.[Name], P.[ProductNumber], P.MakeFlag From Product As P" ></asp:EntityDataSource>
이때 필요하다면 Where 나 Group By 절등을 포함하여 표시할 데이터의 범위를 한정할 수 도 있습니다. 다만 CommandText 속성은 Select 와 EntitySetName 속성과는 함께 사용될 수 없습니다. 또한 CommandText 나 GroupBy 속성은 <그림 1-2> 에서 특정 컬럼을 선택하는 것과 같은 조치이므로 automatic inserts, automatic update, automatic delete 설정이 완료 되어 있다 하더라도 해당 설정은 무시됩니다.

마지막으로 EntityDataSource 컨트롤도 다른 데이터 컨트롤과 마찬가지로 WhereParameter, SelectParameter, InsertParameter 나 그외 ControlParameter, QueryStringParameter 등으로 Query에 Parameter 추가가 가능합니다.

'Programming > .NET' 카테고리의 다른 글

[C#] FileInfo  (1) 2016.06.09
[ASP.NET] LoginView  (0) 2016.06.01
[ASP.NET] EntityDataSource  (0) 2016.05.24
[C#] System.IO.Path 클래스  (0) 2016.05.17
[ASP.NET] 예외처리  (0) 2016.05.11
[ASP.NET] 사이트 네비게이션 (sitemap)  (0) 2016.04.19