Silverlight 客户端库
LINQ 查询
起初,您的上下文中似乎无法使用 linq 语法,因为所有查询都是异步的,并且 IEnumerable 显然没有 BeginExecute 方法。要使用 Linq 语法,您需要转换最终查询:
var query = (DataServiceQuery<Product>)myContext.Products.Where(p => p.SupplierID == 5);
query.BeginExecute(this.HandleQueryResults, query);
注意查询是传入的,这是因为你需要使用相同的 DataServiceQuery 实例来调用 EndExecute,你不能只使用上下文。
更改跟踪
客户端库不会自动跟踪生成类型中的字段更改。为此,您必须在部分类型中实现 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 版中,数据服务工具可以为您生成此文件,但目前仅在 CTP 中:Silverlight 3 和 1.5 CTP2 中的数据绑定简介
更新的服务器数据
默认情况下,Silverlight 客户端上下文将 MergeOption 设置为 AppendOnly。这意味着一旦您第一次查询实体,您将不会看到任何更改,这是一种缓存和性能优化的形式。要查看更新,您需要将 MergeOption 更改为 OverwriteChanges,这将确保对象已更新。您还可以丢弃上下文并重新创建。
myContext.MergeOption = MergeOption.OverwriteChanges
跨域访问
Silverlight 为 ADO.NET 数据服务 1 生成的类型使用它们自己的网络堆栈来提供更多的请求动词,但不幸的是,这意味着跨域策略不适用,并且您无法发出跨域请求。要解决此问题,您可以代理请求或等待 Silverlight 3 中支持跨域的版本 1.5(CTP 2 当前可用)。
链接: