DataServiceContext.SetLink(Object, String, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Powiadamia o DataServiceContext tym, że istnieje nowe łącze między określonymi obiektami i że łącze jest reprezentowane przez właściwość określoną przez sourceProperty
parametr .
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)
Parametry
- source
- Object
Obiekt źródłowy dla nowego linku.
- sourceProperty
- String
Właściwość obiektu źródłowego identyfikującego obiekt docelowy nowego łącza.
- target
- Object
Obiekt podrzędny zaangażowany w nowy link, który ma zostać zainicjowany przez wywołanie tej metody. Obiekt docelowy musi być podtypem typu zidentyfikowanego sourceProperty
przez parametr . Jeśli target
jest ustawiona wartość null, wywołanie reprezentuje operację usuwania łącza.
Wyjątki
Gdy source
wartość , sourceProperty
lub target
ma wartość null.
Określony link już istnieje.
-lub-
Obiekty podane jako source
lub target
są w Detached stanie lub .Deleted
-lub-
sourceProperty
nie jest właściwością nawigacji, która definiuje odwołanie do pojedynczego powiązanego obiektu.
Przykłady
W poniższym przykładzie pokazano, jak używać AddLink metod i SetLink do tworzenia linków definiujących relacje. W tym przykładzie Order_Details
właściwości nawigacji w obiekcie są również jawnie ustawione.
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)
Uwagi
Nowy link jest tworzony w Added stanie. Ten DataServiceContext nowy link dodaje do zestawu nowo utworzonych linków, które mają być wysyłane do usługi danych w następnym wywołaniu do SaveChangesusługi .
Jeśli argument docelowy ma wartość null, link reprezentowany przez właściwość sourceProperty powinien zostać usunięty lub usunięty (link zostanie przeniesiony do Deleted stanu).
Łącza to relacje jednokierunkowe. Jeśli wskaźnik wsteczny istnieje wskazujący skojarzenie dwukierunkowe, ta metoda powinna zostać wywołana ponownie, aby powiadomić DataServiceContext drugi link
Ta metoda obsługuje tylko dodawanie linków do relacji z wielokrotnością = 1 (właściwość źródłowa jest odwołaniem do obiektu). Jeśli na przykład klasa Person
jest powiązana z inną Person
właściwością, to wywołanie może służyć do powiązania z Person
Person
elementem Friend
. Ta metoda zgłosi wyjątek, jeśli sourceProperty
reprezentowana ma relację kardynalności więcej niż jedną.