DataServiceContext.SetLink(Object, String, Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定されたオブジェクト間に新しいリンクが存在することと、そのリンクが DataServiceContext パラメーターで指定されたプロパティによって表されることを 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)
パラメーター
- source
- Object
新しいリンクのソース オブジェクト。
- sourceProperty
- String
新しいリンクのターゲット オブジェクトを識別する、ソース オブジェクトのプロパティ。
- target
- Object
このメソッドを呼び出すことによって初期化される新しいリンクに含まれる子オブジェクト。 ターゲット オブジェクトは、sourceProperty
パラメーターで識別される型のサブタイプである必要があります。
target
が null に設定されている場合、この呼び出しはリンクの削除操作を表します。
例外
source
、sourceProperty
、または target
が null の場合。
指定されたリンクは既に存在します。
または
または target
としてsource
指定されたオブジェクトは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
クラスが Person
プロパティによって別の Friend
に関連付けられている場合、この呼び出しを使用して Person
を Person
に関連付けることができます。 表される sourceProperty
が 2 以上のカーディナリティのリレーションシップを持つ場合、このメソッドは例外をスローします。