次の方法で共有


データの変更 (WCF Data Services)

WCF Data Services は標準のインターネット プロトコルを使用するので、HTTP 要求を生成し、HTTP 応答を処理できるアプリケーションであれば、.NET Framework 以外のアプリケーションとも相互運用が可能です。このトピックでは、アドレス指定されたリソースが表すエンティティ データで作成、読み取り、更新、および削除操作を実行するためにサポートされている HTTP アクションについて説明します。

データ サービスへのデータの挿入

ターゲット エンティティ セットを識別する URI に HTTP POST 要求を送信して新しいエンティティを作成します。Northwind ベースのクイック スタート データ サービスで、新しい Products エンティティを作成するには、アプリケーションは HTTP POST 要求を Products エンティティ セットの URI (https://localhost:12345/Northwind.svc/Products など) に送信する必要があります。

HTTP POST 要求のペイロードは、サポートされている形式でエンコードされたエンティティ データです。受信したメッセージのデータを解釈する方法をデータ サービスに伝えるために、要求メッセージの Content-Type ヘッダーは、ペイロードの形式を示す必要があります。ペイロードでは、null 値をサポートしないエンティティのすべてのプロパティのプロパティ値を指定する必要があります (サーバーで生成された値を除く)。値を指定しない場合は、既定値または null に設定されます。詳細については、「POST メソッド (WCF Data Services)」および「方法: エンティティ データをリソースとして挿入する (WCF Data Services)」を参照してください。

メモメモ :

同じプロパティに対して単一のメッセージ ペイロードで異なる値を指定できます。データ ソースに保存される値は、データ サービスの実装によって異なります。データ サービスの実装では、プロパティ値の代入順序は必ずしも保証されません。

POST 要求が正常に処理された後、データ サービスは、作成したエンティティを表すペイロードを含む HTTP 応答を生成します。これには、サーバーによって生成された値またはデータベース内のトリガーによって変更された値が含まれます。応答メッセージには、新しく作成されたエンティティの URI を参照する Location ヘッダーも含まれます。エンティティ データを挿入するための HTTP メッセージ要件の詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様のセクション 2.2.7.1.1 を参照してください。

データ サービスのデータの更新

WCF Data Services は、データ サービスのデータを更新する 2 つの個別の HTTP メソッドをサポートします。

  • HTTP PUT - エンティティを一意にアドレス指定する URI に HTTP PUT 要求を送信して、既存のエンティティを更新できます。このアクションは、既存のエンティティ データを要求メッセージのペイロード内のデータで置き換えます (エンティティのすべてのスカラー プロパティを含む)。スカラー プロパティ値が含まれない場合は、値はサーバーでプロパティの既定値にリセットされます。HTTP PUT 要求の正常な応答は 204 (コンテンツなし) HTTP 応答です。

  • HTTP MERGE -WCF Data Services では、AtomPub プロトコルの拡張として HTTP MERGE メソッドが導入されています。このメソッドは、要求ペイロードが指定した特定のプロパティ値だけを置換します。これは、ペイロードのエンティティ表現に変更するプロパティだけを含む必要があることを意味します。プロパティが含まれていない場合、データ ソースに現在存在する値が維持されます。HTTP MERGE 要求の正常な応答は 204 (コンテンツなし) HTTP 応答です。エンティティ データを更新する HTTP MERGE メソッドの詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様の「2.2.4.1 MERGE」を参照してください。

詳細については、「MERGE メソッド (WCF Data Services)」および「方法: エンティティ データをリソースとして更新する (WCF Data Services)」を参照してください。

エンティティ データを更新する HTTP メッセージ要求の詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様の以下のセクションを参照してください。

リソースからのデータの削除

削除する特定のエンティティをアドレス指定する URI に対して HTTP DELETE 要求を実行してエンティティを削除します。HTTP DELETE 要求にはペイロードは必要ありません。エンティティが正常に削除された場合の応答メッセージは 204 (コンテンツなし) 応答です。詳細については、「DELETE メソッド (WCF Data Services)」および「方法: リソースとしてのエンティティ データを削除する (WCF Data Services)」を参照してください。

削除するエンティティに別のエンティティへの制約されたリレーションシップがある場合、親エンティティを削除する前にエンティティ モデルまたはデータベースのいずれかで関連エンティティを削除する必要があることがあります。たとえば、注文は顧客のない状態で存在できないので、顧客を削除するには注文を先に削除する必要があります。詳細については、「Referential Constraints (Entity Framework)」を参照してください。このような制約によって削除操作が失敗した場合は、エラーの詳細を含む応答メッセージが返されます。

エンティティ データを削除する HTTP メッセージ要求の詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様のセクション 2.2.7.4.1 を参照してください。

リレーションシップの操作

データ モデルのアソシエーションとして定義される、1 つ以上の別のエンティティへのリレーションシップがあるエンティティを追加、更新、または削除する際には、リレーションシップも作成、変更、または削除できなければなりません。WCF Data Services は、エンティティ インスタンス間のこれらのリレーションシップをリンクとして処理します。これらのリンクは、$links 演算子を使用してアドレス指定されます。詳細については、「リソースのアドレス指定 (WCF Data Services)」を参照してください。

リンクは、顧客と注文の間のように常に一方向として定義されます。注文とその注文が属する顧客の間の参照リンクなどのように、エンティティ間のリレーションシップは双方向なので、逆方向のリンクも存在します。リンク要求のペイロードは、リンクの種類によって異なります。一対多または多対一のリレーションシップの "一" の側を参照するリンクの場合、メッセージのペイロードは、関連エンティティをアドレス指定する URI を含む link 要素が含まれます。たとえば、HTTP POST メッセージを送信して新しい Territory エンティティを作成する場合、メッセージ ペイロード内の次のリンク要素によって、Territory が属する特定の Region への参照リンクが作成されます。

<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Region" title="Region" href="Region(4)">

同時実行の処理

WCF Data Services では、更新の競合を検出するための同時実行制御がサポートされています。その設計では、永続的なキャッシュ、eTag (エンティティ タグ)、if-* 必須条件ヘッダー、eTag 応答ヘッダーなどの HTTP/1.1 機能を利用しています。詳細については、eTags の HTTP ルール (RFC2626) を参照してください。

eTag は、HTTP/1.1 に準拠した Web サーバーによって返される HTTP 応答ヘッダーです。eTag を使用して、特定の URL のコンテンツ内の変更を確認できます。ヘッダーの値は、リソースの状態を表す文字列になります。If-Match 要求ヘッダーを使用する更新 (PUT、MERGE) 要求の場合、要求の本文と一緒に eTag を指定できます。クライアントが送信した eTag が、更新するリソースに対してサーバーが保持している eTag と一致しない場合は、更新の競合が発生して挿入操作がキャンセルされます。取得 (GET) 要求の場合は、If-None-Match HTTP ヘッダーを使用して、前の要求からリソースの eTag を指定できます。eTag が同じであるとサーバーによって判定された場合、リソースの状態は変更されていないと見なされて、リソースは応答で再送信されません。eTag 実装の詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様の 2.2.5.4 を参照してください。

データ モデルで同時実行トークンを定義して、データ サービスで同時実行チェックを有効にできます。同時実行トークンは、リソースが変更されているかどうかを決定するために検証されるエンティティ型の 1 つ以上のプロパティで構成されます。エンティティ型に対して同時実行トークンを定義すると、データ サービスは、その型のリソースを返す各要求に対して 1 つの eTag を生成します。同時実行トークン定義は、データ サービス プロバイダーの種類によって異なります。

  • Entity Framework プロバイダー – データ モデルで、エンティティ型の同時実行トークンの一部であるプロパティの ConcurrencyMode 属性は Fixed に設定されます。

  • リフレクション プロバイダー – ETagAttribute がエンティティ型であるデータ クラスに適用されます。この属性は、指定したプロパティ名に基づいて同時実行トークンを宣言します。

参照

概念

リソースのアドレス指定 (WCF Data Services)

クエリ式 (WCF Data Services)

その他の技術情報

データ サービスへのアクセス (WCF Data Services)

ペイロード形式 (WCF Data Services)