2

SilverlightのWCFデータサービスを使用して、1つのコマンドで永続オブジェクトグラフを削除することはできますか?私はこのウォークスルーから始めて、選択した注文を削除するためのコードを追加しました(詳細が含まれています):

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
コンテンツタイプ:マルチパート/混合; border = changeset_b451aecf-b66d-4f0f-8e6d-8a067646b350

--changeset_b451aecf-b66d-4f0f-8e6d-8a067646b350
コンテンツタイプ:application / http
コンテンツ転送エンコーディング:バイナリ

削除http:// localhost:55378 / PurchasesService.svc / Orders(1)HTTP / 1.1
コンテンツID:90

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

ただし、データベース側では外部キー制約違反で失敗します。

--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d
コンテンツタイプ:マルチパート/混合; border = changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63

--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63
コンテンツタイプ:application / http
コンテンツ転送エンコーディング:バイナリ

HTTP /1.1500内部サーバーエラー
コンテンツID:90
キャッシュ制御:キャッシュなし
DataServiceVersion:1.0;
コンテンツタイプ:application / xml

<?xml version = "1.0" encoding = "utf-8" Standal = "yes"?>
<error xmlns = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <コード></コード>
  <messagexml:lang="uk-UA">このリクエストの処理中にエラーが発生しました。</message>
</エラー>
--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63--
--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d--

また、リレーションのOnDeleteプロパティを.edmxのCascadeに設定しようとしました

そのような削除を行うことは可能ですか?参照されているオブジェクト(クライアントまたはサーバー)の削除は誰が行う必要がありますか?また、サーバーに送信する必要のある削除要求の数:1つまたはN + 1(Nは特定の順序の詳細の数)。たぶん私はいくつかの重要なポイントを逃しています。オブジェクトグラフの削除について説明しているWCFデータサービスのチュートリアルはありますか?

4

1 に答える 1

3

わーい!私はそれを考え出した!=D 私は今日何時間も同じことをしていました!

そのため、edmx で Cascade を設定しませんでした。

データベースに設定します

SQL Server Management Studio の場合:

  1. データベース ダイアグラムで、カスケード削除するリレーションシップを選択します
  2. プロパティを開く
  3. 挿入と更新を展開
  4. 削除ルールをカスケードに設定します。

エンティティ フレームワーク モデルを再読み込み/更新します。これを行うと、Visual Studio は CSDL/SSDL を更新します (なんでも?)。

MSDN からの参照:
「親レコードが削除されたときに親のすべての子レコードを自動的に削除する場合は、カスケード削除規則を指定できます。概念モデルと概念モデルの両方でカスケード削除規則を指定することを強くお勧めします。データベース. "

于 2010-11-23T17:03:29.147 に答える