Клиентская библиотека Silverlight
LINQ Querying
Сначала кажется, что синтаксис 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 инструменты Data Services могут сгенерировать это для вас, но в настоящее время это только в CTP: Введение в привязку данных в Silverlight 3 с 1,5 CTP2
Обновленные данные сервера
По умолчанию в контексте клиента Silverlight MergeOption установлено значение AppendOnly. Это означает, что вы не увидите никаких изменений в сущностях после первого запроса к ним, это форма кеширования и оптимизации производительности. Чтобы увидеть обновления, вам нужно изменить MergeOption на OverwriteChanges, это обеспечит обновление объектов. Вы также можете выбросить свой контекст и заново создать.
myContext.MergeOption = MergeOption.OverwriteChanges
Междоменный доступ
Сгенерированные типы Silverlight для ADO.NET Data Services 1 используют свой собственный сетевой стек, чтобы сделать доступным больше глаголов запросов, но, к сожалению, это означает, что междоменные политики не применяются, и вы не можете делать междоменные запросы. Чтобы обойти это, вы можете прокси-запросы или подождать версии 1.5 (CTP 2 в настоящее время доступна), которая поддерживает кросс-домены в Silverlight 3.
Ссылки: