Silverlightクライアントライブラリ
LINQクエリ
最初は、すべてのクエリが非同期であり、IEnumerableにBeginExecuteメソッドがないため、linq構文をコンテキストから使用できないように見えます。Linq構文を使用するには、最終的なクエリをキャストする必要があります。
var query = (DataServiceQuery<Product>)myContext.Products.Where(p => p.SupplierID == 5);
query.BeginExecute(this.HandleQueryResults, query);
クエリが渡されることに注意してください。これは、EndExecuteを呼び出すために同じDataServiceQueryインスタンスを使用する必要があるためであり、コンテキストだけを使用することはできません。
変更の追跡
クライアントライブラリは、生成されたタイプのフィールドの変更を自動的に追跡しません。これを機能させるには、部分型にINotifyPropertyChangedを実装する必要があります。
例:
public partial class Product : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
partial void OnProductIDChanged() { FirePropertyChanged("ProductID"); }
partial void OnProductNameChanged() { FirePropertyChanged("ProductName"); }
private void FirePropertyChanged(string property) { ... }
}
バージョン1.5では、Data Servicesツールでこれを生成できますが、現在はCTPのみです:1.5CTP2を使用するSilverlight3でのデータバインディングの概要
更新されたサーバーデータ
デフォルトでは、SilverlightクライアントコンテキストではMergeOptionがAppendOnlyに設定されています。これが意味するのは、エンティティを初めてクエリした後は、エンティティへの変更は表示されないということです。これは、キャッシュとパフォーマンスの最適化の一形態です。更新を確認するには、MergeOptionをOverwriteChangesに変更する必要があります。これにより、オブジェクトが確実に更新されます。コンテキストを破棄して再作成することもできます。
myContext.MergeOption = MergeOption.OverwriteChanges
クロスドメインアクセス
ADO.NET Data Services 1用にSilverlightで生成された型は、独自のネットワークスタックを使用して、より多くの要求動詞を使用できるようにしますが、残念ながら、これはクロスドメインポリシーが適用されず、クロスドメイン要求を行うことができないことを意味します。これを回避するには、リクエストをプロキシするか、Silverlight 3でクロスドメインをサポートするバージョン1.5(CTP 2が現在利用可能)を待つことができます。
リンク: