Вставка объекта и зависимых объектов с использованием RIA Services - PullRequest
0 голосов
/ 12 октября 2010

У меня возник вопрос о вставке объекта с зависимыми объектами с помощью RIA Services (с Silverlight 4.0).

Допустим, у меня есть сущность в моей (sql) базе данных под названием «Пиво» и одна «Поставщик», с отношением: Пиво 1 - n Поставщик . Существует несколько поставщиков одного вида пива.

Теперь есть следующий вариант использования: пользователь вводит новое пиво, скажем, с 5 поставщиками.

В режиме Silverlight у меня теперь есть два DomainDataSource. На Пиве DomainDataSource Я добавляю и отправляю новое пиво, а на Поставщика DomainDataSource Я отправляю поставщиков, которые теперь имеют внешний ключ, который связывает их с пивом.

У меня такой вопрос: как я могу убедиться, что Пиво сначала отправляется, а затем и зависимые (запоминают внешний ключ) поставщики?

Я знаю, что мог бы просто связать SubmitChanges(), используя событие OnSubmitted. Но это решение довольно ... хорошо ... отстой. Это делает для действительно ужасного кода.

Спасибо за все ваши многочисленные идеи!

1 Ответ

1 голос
/ 20 октября 2010

К сожалению, нет способа принудительно установить порядок обновлений, входящих в тот же набор изменений.

Однако, если все новые поставщики отправляются на сервер с новым пивом (большой IF), вы можете вручную проверить набор изменений в вашем методе Upddate:

public void UpdateBeer(Beer beer)
{
    foreach(ChangeSetEntry changeSetEntry in ChangeSet.Entries)
    {
        if (changeSetEntry.Entity.GetType() == typeof(Supplier))
        {
            Supplier supplier = (Supplier)changeSetEntry.Entity;
            UpdateSupplierInternal(supplier);
        }
    }

    DataContext.Beers.Attach(beer, ChangeSet.GetOriginal(beer));
}

Это вызывает отдельный метод для обновления поставщика. Вам все еще нужен метод UpdateSupplier, иначе RIA сгенерирует исключение, если оно существует в ChangeSet, но метод не должен ничего делать:

public void UpdateSupplier(Supplier supplier)
{
    // do nothing
}
...