データの追加
ADO.NET Data Servicesを使用したデータの追加を考えてみましょう。
例えば、前述したサンプルシステムでは、購入したい商品を選択し、[バスケットに追加]ボタンを押すことで、データの追加が発生します。

このときデータが追加されるエンティティ(テーブル)の1つとして、Basketsがあります。
Basketsは、Customersエンティティ(購入者)と以下の図のような関係性を持っているので、新規でBasketsオブジェクトを作成して追加する際に、Customersに対して考慮を行う必要があります。

下記が、Basketsへのデータ追加のコードです。
Baskets basket = new Baskets()
{
BasketId = Guid.NewGuid(),
Customers = AuthenticationContext.Current.User.Customer,
LastUpdateDate = DateTime.Now
};
context.AddToBaskets(basket);
context.AttachTo("Customers", AuthenticationContext.Current.User.Customer);
context.SetLink(basket, "Customers“g, AuthenticationContext.Current.User.Customer);
// Data Services による更新確定
context.BeginSaveChanges(SaveChangesOptions.Batch, OnAddBasketSaveChanged, context);
}
private void OnAddBasketSaveChanged(IAsyncResult result)
{
Dispatcher.BeginInvoke(() =>
{
MSStoreSampleEntities context = result.AsyncState as MSStoreSampleEntities;
DataServiceResponse response = context.EndSaveChanges(result);
});
}
初めにBasketsオブジェクトを新規で作成して、各メンバーの値をセットしているのが分かります。この中にあるCustomersというメンバーには、別エンティティをセットする必要があり、このプログラム上ではここが初登場になるため、contextに対してAttachToを実行してデータの追跡処理を依頼しておく必要があります。さらに、contextに対してSetLinkを行い、BasketsとCustomersの関係性を伝えます。
その後、BeginSaveChangesを実行して追加処理を先に進めますが、当然ながら、追加処理も非同期の処理が関係します。
削除や更新に関してもサンプルでは実装しているので、ぜひ興味があれば確認してみてください。
