DataServiceContext.SetLink(Object, String, Object) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
DataServiceContext Belirtilen nesneler arasında yeni bir bağlantı olduğunu ve bağlantının parametresi tarafından belirtilen özellik tarafından sourceProperty
temsilildiğini bildirir.
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)
Parametreler
- source
- Object
Yeni bağlantının kaynak nesnesi.
- sourceProperty
- String
Yeni bağlantının hedef nesnesini tanımlayan kaynak nesnedeki özelliği.
- target
- Object
Bu yöntem çağrılarak başlatılacak yeni bağlantıda yer alan alt nesne. Hedef nesne, parametresi tarafından sourceProperty
tanımlanan türün bir alt türü olmalıdır. null olarak ayarlanırsa target
, çağrı bir silme bağlantısı işlemini temsil eder.
Özel durumlar
veya sourceProperty
target
null olduğundasource
.
Belirtilen bağlantı zaten var.
-veya-
veya olarak source
sağlanan nesneler veya target
Deleted durumundadırDetached.
-veya-
sourceProperty
tek bir ilgili nesneye başvuru tanımlayan bir gezinti özelliği değildir.
Örnekler
Aşağıdaki örnekte ilişkileri tanımlayan bağlantılar oluşturmak için ve SetLink yöntemlerinin nasıl kullanılacağı AddLink gösterilmektedir. Bu örnekte, nesnedeki Order_Details
gezinti özellikleri de açıkça ayarlanmıştır.
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)
Açıklamalar
Durumunda yeni bir bağlantı oluşturulur Added . , DataServiceContext bu yeni bağlantıyı bir sonraki çağrısında veri hizmetine gönderilecek yeni oluşturulan bağlantılar kümesine SaveChangesekler.
Hedef bağımsız değişken null ise sourceProperty tarafından temsil edilen bağlantı kaldırılmalı veya silinmelidir (Bağlantı duruma taşınır Deleted ).
Bağlantılar tek yönlü ilişkilerdir. İki yönlü ilişkilendirmeyi gösteren bir geri işaretçisi varsa, ikinci bağlantıyı bildirmek DataServiceContext için bu yöntem yeniden çağrılmalıdır
Bu yöntem yalnızca çokluk = 1 olan ilişkilere bağlantı eklemeyi destekler (Kaynak özellik bir nesne başvurusudur). Örneğin, bir sınıf bir özelliğiyle başka Person
bir sınıfla Person
ilişkiliyse, bu çağrı ile Person
ilişkilendirmek Person
için Friend
kullanılabilir. Bu yöntem, temsil edilenin sourceProperty
birden fazla kardinalite ilişkisi varsa bir özel durum oluşturur.