연습: RIA Services 솔루션 만들기
이 연습에서는 AdventureWorksLT 데이터베이스에서 데이터를 검색한 다음 이 데이터가 표시되는 Silverlight 클라이언트에서 이 데이터를 사용할 수 있도록 하는 WCF RIA Services 응용 프로그램을 만듭니다. 중간 계층에서 서버의 다양한 데이터베이스 테이블을 나타내는 엔터티 클래스를 만들어 데이터 소스의 데이터에 액세스한 다음 이러한 중간 계층 엔터티를 Silverlight 클라이언트에서 액세스할 수 있도록 하는 도메인 서비스를 만들어 데이터를 표시합니다. 이 연습은 RIA Services 설명서에 있는 다른 많은 연습의 시작 지점으로 사용됩니다.
RIA Services 설명서에서 제공하는 이 연습 및 다른 연습을 실행하려면 WCF RIA Services 및 WCF RIA Services 도구 키트 외에도 Visual Studio 2010, Silverlight Developer 런타임 및 SDK 등의 몇 가지 필수 구성 요소 프로그램을 올바르게 설치하고 구성해야 합니다. 또한 SQL Server 2008 R2 Express with Advanced Services를 설치하고 구성해야 하며 AdventureWorks OLTP 및 LT 데이터베이스를 설치해야 합니다.
이러한 각 사전 요구 사항을 충족하기 위한 자세한 지침은 WCF RIA Services의 사전 요구 사항 노드의 항목에서 제공합니다. 이 RIA Services 연습을 수행할 때 발생할 수 있는 문제를 최소화하려면 이 연습을 진행하기 전에 여기서 제공하는 지침을 따르십시오.
RIA Services 솔루션을 설정하려면
-
파일, 새로 만들기, 프로젝트를 차례로 선택하여 Visual Studio 2010에서 새 RIA Services 프로젝트를 만듭니다.
새 프로젝트 대화 상자가 나타납니다.
-
설치된 템플릿의 Silverlight 그룹에서 Silverlight 응용 프로그램 템플릿을 선택하고 새 프로젝트의 이름을 RIAServicesExample로 지정합니다.
-
확인을 클릭합니다.
새 Silverlight 응용 프로그램 대화 상자가 나타납니다.
-
대화 상자 아래쪽에서 WCF RIA Services 사용 확인란을 선택합니다. 이 확인란을 선택하면 클라이언트 프로젝트와 서버 프로젝트 간에 RIA Services 링크가 만들어집니다.
-
확인을 클릭하여 솔루션을 만듭니다.
솔루션에 클라이언트 프로젝트와 서버 프로젝트가 포함되어 있습니다. 클라이언트 프로젝트는 RIAServicesExample로 이름이 지정되며 프레젠테이션 계층을 만드는 데 사용하는 Silverlight 코드를 포함합니다. 서버 프로젝트는 RIAServicesExample.Web으로 이름이 지정되며 중간 계층 코드를 포함합니다.
이 단원에서는 AdventureWorksLT 데이터베이스의 데이터를 나타내는 ADO.NET 엔터티 클래스를 만듭니다. RIA Services 는 다양한 데이터 모델링 클래스 및 데이터 소스와 함께 작동합니다. RIA Services 를 사용하여 데이터에 액세스하는 옵션에 대한 자세한 내용은 데이터 항목을 참조하십시오.
주의: |
|---|
| Visual Studio 2010에서 EMD(엔터티 데이터 모델)를 사용하는 경우 모델에 외래 키 열 포함 옵션을 선택해야 합니다. 기본적으로 이 옵션은 엔터티 데이터 모델 마법사를 사용할 때 선택됩니다. 또한 어셈블리에 EMD 매핑 정보를 포함하는 기본 동작도 사용해야 합니다. |
중간 계층에서 데이터를 사용할 수 있도록 하려면
-
솔루션 탐색기에서 서버 프로젝트 RIAServicesExample.Web을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 항목을 선택합니다.
새 항목 추가 대화 상자가 나타납니다.
-
범주 목록에서 데이터를 선택한 다음 ADO.NET 엔터티 데이터 모델 템플릿을 선택합니다.
-
새 파일의 이름을 AdventureWorksModel.edmx로 지정하고 추가를 클릭합니다.
엔터티 데이터 모델 마법사가 나타납니다.
-
모델 콘텐츠 선택 화면에서 데이터베이스에서 생성 옵션을 선택하고 다음을 클릭합니다.
-
데이터 연결 선택 화면에서 데이터베이스에 대한 데이터 연결을 만들고 다음을 클릭합니다.
-
데이터베이스 개체 선택 화면에서 Address, Customer, CustomerAddress 테이블을 차례로 선택합니다.
-
모델에 외래 키 열 포함 확인란이 기본적으로 선택되어 있는지 확인하고 마침을 클릭합니다.
엔터티 모델이 테이블에 대해 만들어집니다.
-
Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
이 단원에서는 중간 계층 프로젝트에 도메인 서비스를 추가합니다. 도메인 서비스는 서버 프로젝트의 데이터 엔터티 및 작업을 클라이언트 프로젝트에 노출합니다. 클라이언트가 데이터와 상호 작용하는 방법을 관리하기 위해 도메인 서비스에 비즈니스 논리를 추가할 수 있습니다.
도메인 서비스를 만들려면
-
서버 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가 및 새 항목을 선택합니다.
-
범주 목록에서 웹을 선택한 다음 도메인 서비스 클래스 템플릿을 선택합니다.
-
클래스의 이름을 CustomerDomainService.cs(또는 CustomerDomainService.vb)로 지정합니다.
-
추가를 클릭합니다.
새 도메인 서비스 클래스 추가 대화 상자가 나타납니다.
-
클라이언트 액세스 사용 확인란이 선택되어 있는지 확인합니다.
-
Customer 엔터티를 선택한 다음 이 엔터티에 대한 편집 사용 확인란을 선택합니다.
-
확인을 클릭합니다.
CustomerDomainService클래스가 새 CustomerDomainService.cs(또는 CustomerDomainService.vb) 파일에서 생성됩니다. -
이 파일을 엽니다. 이 파일의 특징은 다음과 같습니다.
-
CustomerDomainService클래스가 RIA Services 프레임워크의 추상 기본 클래스인 LinqToEntitiesDomainService 클래스에서 파생됩니다. 이 기본 클래스는 도메인 서비스에서 ADO.NET 엔터티 데이터 클래스를 노출하기 때문에 자동으로 사용되었습니다. -
제네릭 기본 클래스는 제네릭 매개 변수에서 ObjectContext 형식의
AdventureWorksLTEntities에 의해 이전 단계에서 만든 엔터티 클래스에 바인딩됩니다. -
CustomerDomainService클래스는 EnableClientAccessAttribute 특성으로 표시되어 클라이언트 계층에 표시됨을 나타냅니다. -
GetCustomers라는 쿼리 메서드가 생성됩니다. 이 메서드는 필터링하거나 정렬하지 않고 모든 항목을 반환합니다. -
레코드에서 고객을 삽입, 업데이트 및 삭제하는 메서드가 생성되었습니다.
-
다른 연습에서는 도메인 서비스에 비즈니스 논리를 추가하는 방법을 보여 줍니다. 이 연습에서는 기본적으로 생성되는 GetCustomers 메서드를 사용하기만 합니다.
클라이언트 프록시 클래스는 솔루션을 빌드할 때 생성됩니다. 클라이언트 프로젝트와 서버 프로젝트 간에 설정된 RIA Services 링크가 이 코드 생성을 가능하게 합니다. 이러한 클라이언트 프록시 클래스는 클라이언트에서 데이터에 액세스할 수 있도록 합니다.
생성된 클라이언트 프록시 클래스를 보려면
-
솔루션을 빌드합니다.
솔루션을 빌드하면 클라이언트 프로젝트에서 코드가 생성됩니다.
-
솔루션 탐색기에서 RIAServicesExample 클라이언트 프로젝트를 선택하고 창 위쪽의 모든 파일 표시 아이콘을 클릭합니다.
Generated_Code 폴더에 RIAServicesExample.Web.g.cs(또는 RIAServicesExample.Web.g.vb) 파일이 포함되어 있습니다.
-
Generated_Code 폴더의 코드 파일을 엽니다.
이 파일의 특징은 다음과 같습니다.
-
WebContextBase 클래스에서 파생되는
WebContext클래스가 생성됩니다. -
DomainContext 클래스에서 파생되는
CustomerDomainContext클래스가 생성됩니다. 이 클래스에는 도메인 서비스에서 만들어진 쿼리 메서드에 해당하는GetCustomersQuery라는 메서드가 있습니다. -
Entity 클래스에서 파생되는
Customer클래스가 도메인 서비스에서 노출하는 엔터티에 대해 생성됩니다. 클라이언트 프로젝트의Customer엔터티 클래스는 서버의Customer엔터티와 일치합니다.
-
WebContextBase 클래스에서 파생되는
Silverlight 클라이언트에서 데이터를 표시하려면
-
MainPage.xaml을 엽니다.
-
왼쪽의 도구 상자에서 XAML 뷰의 Grid 요소 안으로 DataGrid 컨트롤을 끌어 옵니다.
도구 상자에서 DataGrid 컨트롤을 끌어 오면 네임스페이스
using System.Windows.Controls문과 System.Windows.Controls.Data 어셈블리에 대한 참조가 자동으로 추가됩니다.
주의: 도구 상자에서 끌어 오지 않고 DataGrid를 추가하는 경우 코드 숨김 파일에서 수동으로 using 문을 추가하고 System.Windows.Controls.Data 어셈블리에 대한 참조를 클라이언트 프로젝트에 추가해야 합니다. -
다음 XAML과 같이
AutoGeneratedColums값을 True로 변경하고DataGrid요소의 이름을CustomerGrid로 지정한 다음 높이 및 너비 특성을 조정합니다.<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="RIAServicesExample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid Name="CustomerGrid"></data:DataGrid> </Grid> </UserControl> -
MainPage.xaml에 대한 코드 숨김을 엽니다.
-
두
using(C#) 또는Imports(Visual Basic) 문을 추가합니다(using RIAServicesExample.Web;및using System.ServiceModel.DomainServices.Client;).RIAServicesExample.Web 네임스페이스는 RIAServicesExample.Web.g.cs(또는 RIAServicesExample.Web.g.vb)에 클라이언트 프로젝트에 대해 생성된 코드를 포함하는 네임스페이스입니다.
-
CustomerDomainContext를 인스턴스화하려면MainPage클래스에서private CustomerDomainContext _customerContext = new CustomerDomainContext();라는 코드 줄을 추가합니다.Imports System.ServiceModel.DomainServices.Client Imports RIAServicesExample.Web Partial Public Class MainPage Inherits UserControl Private _customerContext As New CustomerDomainContext Public Sub New() InitializeComponent() Dim loadOp = Me._customerContext.Load(Me._customerContext.GetCustomersQuery()) CustomerGrid.ItemsSource = loadOp.Entities End Sub End Class
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using RIAServicesExample.Web; using System.ServiceModel.DomainServices.Client; namespace RIAServicesExample { public partial class MainPage : UserControl { private CustomerDomainContext _customerContext = new CustomerDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery()); CustomerGrid.ItemsSource = loadOp.Entities; } } } -
LoadOperation을 사용하여
GetCustomersQuery메서드를 호출하는 방법으로 고객 엔터티를 검색합니다(LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());). -
CustomerGrid.ItemsSource = loadOp.Entities;를 사용하여 DataGrid에 로드된 엔터티를 바인딩합니다.요약하면 MainPage.xaml.cs 파일에 포함된 코드는 다음과 같습니다.
//Namespaces added using RIAServicesExample.Web; using System.ServiceModel.DomainServices.Client; namespace RIAServicesExample { public partial class MainPage : UserControl { private CustomerDomainContext _customerContext = new CustomerDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery()); CustomerGrid.ItemsSource = loadOp.Entities; } } } -
F5 키를 눌러 응용 프로그램을 실행합니다.
다음과 유사한 데이터 표가 표시됩니다.
이 연습에서는 프로젝트를 만들고 도메인 서비스에서 필터링되지 않은 데이터를 검색하는 기본 단계만 보여 주었습니다. 추가 기능에 대해 배우려면 다음 제안 사항을 참고하십시오.
-
일반적으로 데이터 필터링에 사용되고 매개 변수를 사용하는 쿼리와 같은 사용자 지정된 쿼리 메서드를 만듭니다. 자세한 내용은 연습: 쿼리 메서드 추가를 참조하십시오.
-
업데이트, 삽입 및 삭제 메서드를 포함하고 데이터를 수정하기 위한 프로세스를 관리하는 도메인 서비스에 비즈니스 논리를 추가합니다. 자세한 내용은 방법: 도메인 서비스 비즈니스 논리 추가를 참조하십시오.