частичная загрузка объекта и управление в Silverlight / WCF Риа - PullRequest
5 голосов
/ 16 апреля 2010

У меня есть приложение Silverlight 4, которое извлекает объекты из базы данных, используя службы WCF RIA. Эти объекты данных довольно просты, всего несколько полей, но одно из этих полей содержит двоичные данные произвольного размера. Приложению требуется доступ к этим данным в основном как можно скорее после того, как пользователь вошел в систему, чтобы отобразить его в списке, включить выбор и т. Д.

Моя проблема в том, что из-за размера этих данных время загрузки недопустимо и может приблизиться к таймауту по умолчанию для службы RIA.

Я бы хотел как-то частично загрузить объекты в мой локальный контекст данных, чтобы у меня были идентификаторы, имена и т. Д., Но не двоичные данные. Затем я мог бы позже (т.е. когда это действительно необходимо) заполнить двоичные поля тех объектов, которые мне нужно отобразить.

Любые предложения о том, как этого добиться, будут приветствоваться.

Другой подход, который возник у меня во время написания этого вопроса (как часто это происходит ?!), заключается в том, что я мог бы переместить двоичные данные в отдельную таблицу базы данных, присоединенную к исходной записи 1: 1, что позволило бы мне сделать использование отложенной загрузки RIA для этих двоичных данных.

еще раз .. комментарии приветствуются! Спасибо.

1 Ответ

5 голосов
/ 16 апреля 2010

Не меняйте свою базу данных. Измените способ доставки.

Создайте отдельную службу RIA WCF для вашего быстрого списка элементов и используйте POCO (обычный старый объект clr) для отправки сводной информации о необходимых вам данных Затем, когда вы будете готовы к большому парню, вы можете загружать по одному, запускаемому по данным из вашего POCO.

Брэд Абрамс и Нихил Котари уже давно говорили об использовании POCO Посмотрите их выступления MIX для получения дополнительной информации.

Создайте новый сервис для элементов быстрого списка:

public class QuickListService : LinqToEntitiesDomainService<MyEntities> 
{
    private IQueryable<QuickList> GetQuickList() 
    {
        return from t in ObjectContext.Table
              select new QuickList 
               {
                      ID = t.ID,
                     Title = t.Title
              };
    }
}

Ваш POCO - это просто объект на сервере, например:

public class QuickList
{
    public string Title;
    public long ID;
}

Удачи!

p.s. Приложение Nikhil's BookClub делает это много. Если вам нужно увидеть реальное приложение, делающее это, скачайте его приложение: http://www.nikhilk.net/Content/Presentations/MIX10/BookClub.zip

...