Шаблон для нескольких операций LoadOperation с использованием WCF RIA Services - PullRequest
2 голосов
/ 08 июня 2010

Я хотел бы иметь возможность загружать несколько наборов сущностей RIA за один вызов без объединения / объединения нескольких небольших операций LoadOperation вместе, чтобы они загружались последовательно.

У меня есть несколько страниц, на которых есть несколько выпадающих списков. Эти комбинированные списки заполняются статическими значениями из базы данных (например, значениями состояния).

Прямо сейчас я предварительно загружаю эти значения в свою виртуальную машину одним методом, который связывает воедино серию операций LoadOperation для каждого типа, который я хочу загрузить. Например:

public void LoadEnums() {
        context.Load(context.GetMyStatusValues1Query()).Completed += (s, e) =>
        {
            this.StatusValues1 = context.StatusValues1;
            context.Load(context.GetMyStatusValues2()).Completed += (s1, e1) =>
            {
                this.StatusValues2 = context.StatusValues2;
                context.Load(context.GetMyStatusValues3Query()).Completed += (s2, e2) =>
                {
                    this.StatusValues3 = context.StatusValues3;

                     (....and so on)


                };
            };
        };
};

Хотя это работает нормально, это кажется немного неприятным. Кроме того, я хотел бы знать, когда завершится последняя операция загрузки, чтобы я мог после этого загрузить любую сущность, над которой я хочу работать, чтобы эти перечисляемые значения правильно разрешались в элементах формы, таких как списки и списки. (Я думаю) я не могу сделать это легко выше без создания делегата и вызова этого по завершении последней операции загрузки.

Итак, мой вопрос: кто-нибудь знает лучший шаблон для использования, в идеале, где я могу загрузить все свои статические наборы сущностей в одной LoadOperation?

1 Ответ

4 голосов
/ 30 октября 2010

Кажется, что ответ довольно прост, по крайней мере, в службах RIA 1.0:

Просто вызывайте LoadOperations одну за другой, и контекст домена будет делать их синхронно в порядке их вызова.

т.е.

context.Load(context.GetMyStatusValues1Query()).Completed += (s, e) =>
  {
    this.StatusValues1 = context.StatusValues1;
  }

context.Load(context.GetMyStatusValues2Query()).Completed += (s1, e1) =>
  {
    this.StatusValues1 = context.StatusValues2;
  }

Это не кажется мне очевидным, потому что я ожидал, что второй запрос будет вызван сразу после первого и в то время, когда он все еще загружался, и выдавал исключение "LoadOperation in progress".

Это замечательно, потому что это означает, что единственная причина для использования уродливого вложенного шаблона LoadOperation в примере в моем вопросе - это когда вторая операция LoadOperation зависит от результата первого.

...