방법: 리플렉션 공급자를 사용하여 데이터 서비스 만들기(WCF Data Services)
WCF Data Services 를 사용하면 클래스가 IQueryable 인터페이스를 구현하는 개체로 노출되는 한 임의의 클래스를 기반으로 하여 데이터 모델을 정의할 수 있습니다. 자세한 내용은 데이터 서비스 공급자(WCF Data Services)를 참조하십시오.
예제
다음 예제에서는 Orders
및 Items
가 포함된 데이터 모델을 정의합니다. 엔터티 컨테이너 클래스 OrderItemData
에는 IQueryable 인터페이스를 반환하는 두 개의 공용 메서드가 있습니다. 이러한 인터페이스는 Orders
및 Items
엔터티 형식의 엔터티 집합입니다. Order
에는 여러 Items
가 포함될 수 있으므로 Orders
엔터티 형식의 Items
탐색 속성은 Items
개체의 컬렉션을 반환합니다. OrderItemData
엔터티 컨테이너 클래스는 OrderItems
데이터 서비스가 파생되는 DataService 클래스의 제네릭 형식입니다.
참고: |
---|
이 예제에서는 메모리 내 데이터 공급자를 보여 주며 변경 내용이 현재 개체 인스턴스 외부에서 유지되지 않으므로 IUpdatable 인터페이스를 구현해도 파생되는 이점이 없습니다.IUpdatable 인터페이스를 구현하는 예제는 방법: LINQ to SQL 데이터 소스를 사용하여 데이터 서비스 만들기(WCF Data Services)를 참조하십시오. |
Imports System
Imports System.Collections.Generic
Imports System.Data.Services
Imports System.Data.Services.Common
Imports System.Linq
Namespace CustomDataServiceClient
<DataServiceKeyAttribute("OrderId")> _
Public Class Order
Private _orderId As Integer
Private _customer As String
Private _items As IList(Of Item)
Public Property OrderId() As Integer
Get
Return _orderId
End Get
Set(ByVal value As Integer)
_orderId = value
End Set
End Property
Public Property Customer() As String
Get
Return _customer
End Get
Set(ByVal value As String)
_customer = value
End Set
End Property
Public Property Items() As IList(Of Item)
Get
Return _items
End Get
Set(ByVal value As IList(Of Item))
_items = value
End Set
End Property
End Class
<EntityPropertyMappingAttribute("Product", "productname", _
"orders", "http://schema.examples.microsoft.com/dataservices", True)> _
<DataServiceKeyAttribute("Product")> _
Public Class Item
Private _product As String
Private _quantity As Integer
Public Property Product() As String
Get
Return _product
End Get
Set(ByVal value As String)
_product = value
End Set
End Property
Public Property Quantity() As Integer
Get
Return _quantity
End Get
Set(ByVal value As Integer)
_quantity = value
End Set
End Property
End Class
Partial Public Class OrderItemData
#Region "Populate Service Data"
Shared _orders As IList(Of Order)
Shared _items As IList(Of Item)
Sub New()
_orders = New Order() { _
New Order() With {.OrderId = 0, .Customer = "Peter Franken", .Items = New List(Of Item)()}, _
New Order() With {.OrderId = 1, .Customer = "Ana Trujillo", .Items = New List(Of Item)()}}
_items = New Item() { _
New Item() With {.Product = "Chai", .Quantity = 10}, _
New Item() With {.Product = "Chang", .Quantity = 25}, _
New Item() With {.Product = "Aniseed Syrup", .Quantity = 5}, _
New Item() With {.Product = "Chef Anton's Cajun Seasoning", .Quantity = 30}}
_orders(0).Items.Add(_items(0))
_orders(0).Items.Add(_items(1))
_orders(1).Items.Add(_items(2))
_orders(1).Items.Add(_items(3))
End Sub
#End Region
Public ReadOnly Property Orders() As IQueryable(Of Order)
Get
Return _orders.AsQueryable()
End Get
End Property
Public ReadOnly Property Items() As IQueryable(Of Item)
Get
Return _items.AsQueryable()
End Get
End Property
End Class
Public Class OrderItems
Inherits DataService(Of OrderItemData)
' This method is called only once to initialize
' service-wide policies.
Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
config.SetEntitySetAccessRule("Orders", EntitySetRights.All)
config.SetEntitySetAccessRule("Items", EntitySetRights.All)
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2
End Sub
End Class
End Namespace
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
namespace CustomDataServiceClient
{
[DataServiceKeyAttribute("OrderId")]
public class Order
{
public int OrderId { get; set; }
public string Customer { get; set; }
public IList<Item> Items { get; set; }
}
[DataServiceKeyAttribute("Product")]
public class Item
{
public string Product { get; set; }
public int Quantity { get; set; }
}
public partial class OrderItemData
{
#region Populate Service Data
static IList<Order> _orders;
static IList<Item> _items;
static OrderItemData()
{
_orders = new Order[]{
new Order(){ OrderId=0, Customer = "Peter Franken", Items = new List<Item>()},
new Order(){ OrderId=1, Customer = "Ana Trujillo", Items = new List<Item>()}};
_items = new Item[]{
new Item(){ Product="Chai", Quantity=10 },
new Item(){ Product="Chang", Quantity=25 },
new Item(){ Product="Aniseed Syrup", Quantity = 5 },
new Item(){ Product="Chef Anton's Cajun Seasoning", Quantity=30}};
_orders[0].Items.Add(_items[0]);
_orders[0].Items.Add(_items[1]);
_orders[1].Items.Add(_items[2]);
_orders[1].Items.Add(_items[3]);
}
#endregion
public IQueryable<Order> Orders
{
get { return _orders.AsQueryable<Order>(); }
}
public IQueryable<Item> Items
{
get { return _items.AsQueryable<Item>(); }
}
}
public class OrderItems : DataService<OrderItemData>
{
// This method is called only once to initialize
//service-wide policies.
public static void InitializeService(IDataServiceConfiguration
config)
{
config.SetEntitySetAccessRule("Orders", EntitySetRights.All);
config.SetEntitySetAccessRule("Items", EntitySetRights.All);
}
}
}
참고 항목
작업
방법: LINQ to SQL 데이터 소스를 사용하여 데이터 서비스 만들기(WCF Data Services)
방법: ADO.NET Entity Framework 데이터 소스를 사용하여 데이터 서비스 만들기(WCF Data Services)