データの追加
ADO.NET Data Servicesを使用したデータの追加を考えてみましょう。
例えば、前述したサンプルシステムでは、購入したい商品を選択し、[バスケットに追加]ボタンを押すことで、データの追加が発生します。
![バスケットに追加](http://cz-cdn.shoeisha.jp/static/images/article/5145/4.gif)
このときデータが追加されるエンティティ(テーブル)の1つとして、Basketsがあります。
Basketsは、Customersエンティティ(購入者)と以下の図のような関係性を持っているので、新規でBasketsオブジェクトを作成して追加する際に、Customersに対して考慮を行う必要があります。
![BasketsエンティティとCustomersエンティティの関係性](http://cz-cdn.shoeisha.jp/static/images/article/5145/5.gif)
下記が、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を実行して追加処理を先に進めますが、当然ながら、追加処理も非同期の処理が関係します。
削除や更新に関してもサンプルでは実装しているので、ぜひ興味があれば確認してみてください。