DataServiceContext.SetLink(Object, String, Object) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 개체 간에 새 링크가 있고 이 링크가 sourceProperty
매개 변수로 지정한 속성으로 표시된다는 것을 DataServiceContext에 알립니다.
public:
void SetLink(System::Object ^ source, System::String ^ sourceProperty, System::Object ^ target);
public void SetLink (object source, string sourceProperty, object target);
member this.SetLink : obj * string * obj -> unit
Public Sub SetLink (source As Object, sourceProperty As String, target As Object)
매개 변수
- source
- Object
새 링크의 원본 개체입니다.
- sourceProperty
- String
새 링크의 대상 개체를 식별하는 소스 개체의 속성입니다.
- target
- Object
이 메서드를 호출하여 초기화되는 새 링크에 관련된 자식 개체입니다. 대상 개체는 sourceProperty
매개 변수로 식별된 형식의 하위 형식이어야 합니다.
target
이 null로 설정된 경우 이 호출은 링크 삭제 작업을 나타냅니다.
예외
source
, sourceProperty
또는 target
가 null인 경우.
지정한 링크가 이미 있습니다.
또는
또는 로 source
제공된 개체가 또는 Deleted 상태에 있습니다Detached.target
또는
sourceProperty
는 단일 관련 개체에 대한 참조를 정의하는 탐색 속성이 아닙니다.
예제
다음 예에서는 및 SetLink 메서드를 AddLink 사용하여 관계를 정의하는 링크를 만드는 방법을 보여 줍니다. 이 예제에서는 개체의 탐색 속성 Order_Details
도 명시적으로 설정됩니다.
int productId = 25;
string customerId = "ALFKI";
Order_Detail newItem = null;
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);
try
{
// Get the specific product.
var selectedProduct = (from product in context.Products
where product.ProductID == productId
select product).Single();
// Get the specific customer.
var cust = (from customer in context.Customers.Expand("Orders")
where customer.CustomerID == customerId
select customer).Single();
// Get the first order.
Order order = cust.Orders.FirstOrDefault();
// Create a new order detail for the specific product.
newItem = Order_Detail.CreateOrder_Detail(
order.OrderID, selectedProduct.ProductID, 10, 5, 0);
// Add the new order detail to the context.
context.AddToOrder_Details(newItem);
// Add links for the one-to-many relationships.
context.AddLink(order, "Order_Details", newItem);
context.AddLink(selectedProduct, "Order_Details", newItem);
// Add the new order detail to the collection, and
// set the reference to the product.
order.Order_Details.Add(newItem);
newItem.Product = selectedProduct;
// Send the changes to the data service.
DataServiceResponse response = context.SaveChanges();
// Enumerate the returned responses.
foreach (ChangeOperationResponse change in response)
{
// Get the descriptor for the entity.
EntityDescriptor descriptor = change.Descriptor as EntityDescriptor;
if (descriptor != null)
{
if (descriptor.Entity.GetType() == typeof(Order_Detail))
{
Order_Detail addedItem = descriptor.Entity as Order_Detail;
if (addedItem != null)
{
Console.WriteLine("New {0} item added to order {1}.",
addedItem.Product.ProductName, addedItem.OrderID.ToString());
}
}
}
}
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred when saving changes.", ex);
}
// Handle any errors that may occur during insert, such as
// a constraint violation.
catch (DataServiceRequestException ex)
{
throw new ApplicationException(
"An error occurred when saving changes.", ex);
}
Dim productId = 25
Dim customerId = "ALFKI"
Dim newItem As Order_Detail = Nothing
' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)
Try
' Get the specific product.
Dim selectedProduct = (From product In context.Products _
Where product.ProductID = productId _
Select product).Single()
' Get the specific customer.
Dim cust = (From customer In context.Customers.Expand("Orders") _
Where customer.CustomerID = customerId _
Select customer).Single()
' Get the first order.
Dim order = cust.Orders.FirstOrDefault()
' Create a new order detail for the specific product.
newItem = Order_Detail.CreateOrder_Detail( _
order.OrderID, selectedProduct.ProductID, 10, 5, 0)
' Add the new order detail to the context.
context.AddToOrder_Details(newItem)
' Add links for the one-to-many relationships.
context.AddLink(order, "Order_Details", newItem)
context.AddLink(selectedProduct, "Order_Details", newItem)
' Add the new order detail to the collection, and
' set the reference to the product.
order.Order_Details.Add(newItem)
newItem.Product = selectedProduct
' Send the insert to the data service.
Dim response As DataServiceResponse = context.SaveChanges()
' Enumerate the returned responses.
For Each change As ChangeOperationResponse In response
' Get the descriptor for the entity.
Dim descriptor = TryCast(change.Descriptor, EntityDescriptor)
If Not descriptor Is Nothing Then
Dim addedProduct = TryCast(descriptor.Entity, Product)
If Not addedProduct Is Nothing Then
Console.WriteLine("New product added with ID {0}.", _
addedProduct.ProductID)
End If
End If
Next
Catch ex As DataServiceQueryException
Throw New ApplicationException( _
"An error occurred when saving changes.", ex)
' Handle any errors that may occur during insert, such as
' a constraint violation.
Catch ex As DataServiceRequestException
Throw New ApplicationException( _
"An error occurred when saving changes.", ex)
설명
새 링크가 상태에서 만들어집니다 Added . 는 DataServiceContext 다음에 를 호출 SaveChanges할 때 데이터 서비스로 보낼 새로 만든 링크 집합에 이 새 링크를 추가합니다.
대상 인수가 null이면 sourceProperty로 표시되는 링크를 제거하거나 삭제해야 합니다(링크가 상태로 이동 Deleted 됨).
링크는 단방향 관계입니다. 양방향 연결을 나타내는 뒤로 포인터가 있는 경우 두 번째 링크를 알리 DataServiceContext 기 위해 이 메서드를 다시 호출해야 합니다.
이 메서드는 multiplicity = 1이 있는 관계에 대한 링크만 추가하도록 지원합니다(원본 속성은 개체 참조임). 예를 들어 클래스가 속성에 의해 다른 Person
클래스 Person
와 관련된 경우 이 호출을 Friend
사용하여 와 연결할 Person
Person
수 있습니다. 이 메서드는 표현된 가 sourceProperty
카디널리티의 관계가 둘 이상인 경우 예외를 throw합니다.
적용 대상
.NET