DataServiceContext.SetLink Método
Notifica a DataServiceContext que existe un nuevo vínculo entre los objetos especificados y que la propiedad especificada por el parámetro sourceProperty representa el vínculo.
Espacio de nombres: System.Data.Services.Client
Ensamblado: Microsoft.Data.Services.Client (en Microsoft.Data.Services.Client.dll)
Sintaxis
'Declaración
Public Sub SetLink ( _
source As Object, _
sourceProperty As String, _
target As Object _
)
'Uso
Dim instance As DataServiceContext
Dim source As Object
Dim sourceProperty As String
Dim target As Object
instance.SetLink(source, sourceProperty, _
target)
public void SetLink(
Object source,
string sourceProperty,
Object target
)
public:
void SetLink(
Object^ source,
String^ sourceProperty,
Object^ target
)
member SetLink :
source:Object *
sourceProperty:string *
target:Object -> unit
public function SetLink(
source : Object,
sourceProperty : String,
target : Object
)
Parámetros
- source
Tipo: System.Object
Objeto de origen para el nuevo vínculo.
- sourceProperty
Tipo: System.String
Propiedad del objeto de origen que identifica el objeto de destino del nuevo vínculo.
- target
Tipo: System.Object
Objeto secundario implicado en el nuevo vínculo que se va a inicializar llamando a este método.El objeto de destino debe ser un subtipo del tipo identificado por el parámetro sourceProperty.Si target está establecido en null, la llamada representa una operación de eliminación de vínculo.
Excepciones
Excepción | Condición |
---|---|
ArgumentNullException | Cuando source, sourceProperty o target son NULL. |
InvalidOperationException | Cuando el vínculo especificado ya existe. O bien Cuando los objetos proporcionados como source o target se encuentran en el estado Detached o Deleted. O bien Cuando sourceProperty no es una propiedad de navegación que define una referencia a un único objeto relacionado. |
Comentarios
Un nuevo vínculo se crea en el estado Added. DataServiceContext agrega este nuevo vínculo al conjunto de vínculos recién creados que se enviarán al servicio de datos en la siguiente llamada a SaveChanges. Para obtener más información, vea Actualizar el servicio de datos (WCF Data Services).
Si el argumento target es null, el vínculo representado por sourceProperty se debe quitar o eliminar. (El vínculo pasa al estado Deleted).
Este método solo admite agregar vínculos a relaciones con multiplicidad = 1 (La propiedad de origen es una referencia de objeto). Por ejemplo, si una clase Person está relacionada con otra Person mediante una propiedad Friend, esta llamada se podría usar para relacionar Person con Person. Este método producirá una excepción si el parámetro sourceProperty representado tiene una relación de cardinalidad de más de uno.
Ejemplos
En el ejemplo siguiente se muestra cómo usar los métodos AddLink y SetLink para crear vínculos que definen relaciones. En este ejemplo, las propiedades de navegación del objeto Order_Details también se establecen explícitamente.
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)
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);
}