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またはtargetとして指定されたオブジェクトは、DetachedまたはDeleted状態です。
-または-
sourceProperty は、1 つの関連オブジェクトへの参照を定義するナビゲーション プロパティではありません。
例
次の例は、 AddLink メソッドと SetLink メソッドを使用して、リレーションシップを定義するリンクを作成する方法を示しています。 この例では、 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 状態に移動されます)。
リンクは一方向のリレーションシップです。 双方向の関連付けを示すバック ポインターが存在する場合は、このメソッドを再度呼び出して、2 番目のリンクの DataServiceContext に通知する必要があります
このメソッドは、多重度 = 1 のリレーションシップへのリンクの追加のみをサポートします (ソース プロパティはオブジェクト参照です)。 たとえば、クラス Personが Friend プロパティによって別のPersonに関連付けられている場合、この呼び出しを使用して、PersonをPersonに関連付ける場合があります。 表される sourceProperty にカーディナリティのリレーションシップが複数ある場合、このメソッドは例外をスローします。