Каскадное удаление в службах данных WCF

Можно ли удалить граф постоянных объектов одной командой, используя службы данных WCF в Silverlight? Я начал с этого пошагового руководства и добавил код для удаления выбранного заказа (который содержит детали):

private void deleteOrder_Click(object sender, RoutedEventArgs e)
{
    Order deletedOrder = (Order)ordersGrid.SelectedItem;

    // Delete the selected order.
    svcContext.DeleteObject(deletedOrder);

    // Remove the deleted order from the binding collection.
    ordersGrid.SelectedIndex = ordersGrid.SelectedIndex == 0 ? 1 : ordersGrid.SelectedIndex - 1;
    ordersBindingCollection.Remove(deletedOrder);
}

Когда я сохраняю изменения обратно на сервер, выдается запрос на удаление:

--batch_2009b119-0747-4019-8974-8ea7dd29963a
Тип контента: составной / смешанный; граница =changeset_b451aecf-B66D-4f0f-8e6d-8a067646b350

--changeset_b451aecf-B66D-4f0f-8e6d-8a067646b350
Тип контента: приложение /http
Content-Transfer-Encoding: двоичный

УДАЛИТЬ http://localhost:55378/PurchasesService.svc/Orders(1) HTTP/1.1
Content-ID: 90

--changeset_b451aecf-B66D-4f0f-8e6d-8a067646b350--
--batch_2009b119-0747-4019-8974-8ea7dd29963a--

Но в конце базы данных происходит сбой с нарушением ограничения внешнего ключа:

--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d
Тип контента: составной / смешанный; граница =changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63

--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63
Тип контента: приложение /http
Content-Transfer-Encoding: двоичный

HTTP/1.1 500 Внутренняя ошибка сервера
Content-ID: 90
Cache-Control: без кеша
DataServiceVersion: 1,0;
Тип контента: application/xml
  <Код>
  Произошла ошибка при обработке этого запроса.--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63--
--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d--

Я также пытался установить свойство OnDelete отношения в Cascade в.edmx

Можно ли сделать такие удаления? Кто должен позаботиться об удалении указанных объектов: клиент или сервер? И сколько запросов на удаление должно быть отправлено на сервер: один или N+1 (где N - количество деталей данного заказа). Может быть, я упускаю какой-то ключевой момент. Существуют ли учебники WCF Data Services, описывающие удаление графов объектов?

1 ответ

Решение

УРА! Я понял это! =D Я был в одном и том же часах сегодня!

Так что я не установил Каскад в EDMX.

Вы устанавливаете это в базе данных

В SQL Server Management Studio:

  1. В диаграмме базы данных выберите отношение, которое вы хотите каскадно удалить
  2. Открытые свойства
  3. Развернуть Вставить и обновить
  4. Установите для правила удаления значение Каскад.

Перезагрузите / Обновите модель вашей сущности. Когда вы сделаете это, Visual Studio обновит CSDL/SSDL (что бы то ни было?).

Ссылка от MSDN:
"Если вы хотите автоматически удалить все дочерние записи родителя при удалении родительской записи, вы можете указать правило каскадного удаления. Настоятельно рекомендуется указывать правила каскадного удаления как в концептуальной модели, так и в базе данных ".

Другие вопросы по тегам