DataServiceContext.SetLink(Object, String, Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Upozorní objekt, DataServiceContext že mezi zadanými objekty existuje nové propojení a že propojení je reprezentováno vlastností určenou parametrem sourceProperty
.
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
Zdrojový objekt pro nové propojení.
- sourceProperty
- String
Vlastnost zdrojového objektu, která identifikuje cílový objekt nového propojení.
- target
- Object
Podřízený objekt zapojený do nového propojení, který má být inicializován voláním této metody. Cílový objekt musí být podtyp typu identifikovaného parametrem sourceProperty
. Pokud target
je nastavena na hodnotu null, volání představuje operaci odstranění propojení.
Výjimky
Pokud source
, sourceProperty
nebo target
mají hodnotu null.
Zadané propojení již existuje.
-nebo-
Objekty zadané jako source
nebo jsou ve Detached stavu nebo Deletedtarget
.
-nebo-
sourceProperty
není navigační vlastnost, která definuje odkaz na jeden související objekt.
Příklady
Následující příklad ukazuje, jak používat AddLink metody a SetLink k vytvoření odkazů, které definují relace. V tomto příkladu jsou explicitně nastaveny také vlastnosti navigace u objektu 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)
Poznámky
Vytvoří se nové propojení ve stavu .Added Objekt DataServiceContext přidá tento nový odkaz na sadu nově vytvořených odkazů, které se odešlou do datové služby při příštím volání .SaveChanges
Pokud je argument cíle null, propojení reprezentované parametrem sourceProperty by mělo být odebráno nebo odstraněno (odkaz se přesune Deleted do stavu ).
Propojení jsou jednosměrné relace. Pokud existuje zpětný ukazatel označující obousměrné přidružení, měla by být tato metoda volána znovu, aby se upozorňují na DataServiceContext druhé propojení.
Tato metoda podporuje pouze přidávání odkazů na relace s násobností = 1 (vlastnost zdroje je odkaz na objekt). Pokud je například třída Person
propojena s jinou Person
Friend
pomocí vlastnosti, může být toto volání použito k relaci Person
s Person
. Tato metoda vyvolá výjimku, pokud sourceProperty
má reprezentovaný vztah kardinality více než jeden.