Клиентская библиотека 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 инструмент 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.
Ссылки:
person
Simon Steele
schedule
06.10.2009