方法 : 更新、挿入、および削除を実行するストアド プロシージャを割り当てる (O/R デザイナ)

更新 : November 2007

ストアド プロシージャは O/R デザイナに追加でき、通常の DataContext メソッドとして実行できます。これらを使用して、エンティティ クラスからデータベースに変更が保存されたときに (たとえば、SubmitChanges メソッドを呼び出したときに) 挿入、更新、および削除を実行する既定の LINQ to SQL ランタイムの動作をオーバーライドすることもできます。

Bb384575.alert_note(ja-jp,VS.90).gifメモ :

ストアド プロシージャが、クライアントに送信する必要のある値 (たとえば、ストアド プロシージャで計算された値) を返す場合は、ストアド プロシージャに出力パラメータを作成します。出力パラメータを使用できない場合は、O/R デザイナによって生成されたオーバーライドを利用するのではなく、部分メソッドを実装します。データベースによって生成される値にマップされるメンバは、INSERT 操作または UPDATE 操作が正常に完了した後で、適切な値に設定する必要があります。詳細については、「既定の動作をオーバーライドするときの開発者の責任 (LINQ to SQL)」を参照してください。

Bb384575.alert_note(ja-jp,VS.90).gifメモ :

LINQ to SQL は、ID 列 (自動インクリメント)、rowguidcol 列 (データベースが生成した GUID)、およびタイムスタンプ列であれば、データベースによって生成された値を自動的に処理します。その他の列型のデータベースが生成した値は、予想に反して null 値になります。データベースが生成した値を返すには、手動で IsDbGenerated を true に設定し、AutoSyncAlwaysOnInsert、または OnUpdate のいずれかに設定する必要があります。

エンティティ クラスの更新動作の構成

既定では、LINQ to SQL エンティティ クラスのデータに対して行われた変更でデータベースを更新 (挿入、更新、および削除) するロジックは、LINQ to SQL ランタイムによって提供されます。ランタイムは、テーブルのスキーマ (列および主キー情報) に基づいて、既定の Insert、Update、および Delete の各コマンドを作成します。既定の動作を使用しない場合は、テーブルのデータの操作に必要な Insert、Update、および Delete を実行する特定のストアド プロシージャを割り当てることで、更新動作を構成できます。この方法は、既定の動作が生成されていない場合、たとえばエンティティ クラスがビューにマップされている場合にも実行できます。最後に、データベースのテーブルへのアクセスには常にストアド プロシージャを通すようにすると、既定の更新動作をオーバーライドできます。

Bb384575.alert_note(ja-jp,VS.90).gifメモ :

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

ストアド プロシージャを割り当てて、エンティティ クラスの既定の動作をオーバーライドするには

  1. デザイナで LINQ to SQL ファイルを開きます (ソリューション エクスプローラで .dbml ファイルをダブルクリックします)。

  2. サーバー エクスプローラまたはデータベース エクスプローラで、[ストアド プロシージャ] を展開し、エンティティ クラスの Insert、Update、Delete の各コマンドで使用するストアド プロシージャを探します。

  3. ストアド プロシージャを O/R デザイナにドラッグします。

    ストアド プロシージャが DataContext メソッドとしてメソッド ペインに追加されます。詳細については、「DataContext メソッド (O/R デザイナ)」を参照してください。

  4. 更新の実行にストアド プロシージャを使用するエンティティ クラスを選択します。

  5. [プロパティ] ウィンドウで、オーバーライドするコマンド ([Insert]、[Update]、または [Delete]) を選択します。

  6. [ランタイムを使用] の横にある省略記号 ([...]) をクリックして、[動作の構成] ダイアログ ボックスを開きます。

  7. [カスタマイズ] を選択します。

  8. [カスタマイズ] の一覧で、目的のストアド プロシージャをクリックします。

  9. [メソッドの引数] および [クラスのプロパティ] の一覧を調べて、[メソッドの引数] が適切な [クラスのプロパティ] にマップされていることを確認します。Update コマンドと Delete コマンドについて、元のメソッド引数 (Original_ArgumentName) を元のプロパティ (PropertyName (オリジナル)) にマップします。

    Bb384575.alert_note(ja-jp,VS.90).gifメモ :

    既定では、メソッド引数は名前が一致した場合にクラス プロパティにマップされます。変更されたプロパティ名がテーブルとエンティティ クラス間で一致しなくなり、デザイナが正しいマッピングを判断できないときは、マップ先となる同等のクラス プロパティを選択することが必要になる場合があります。

  10. [OK] または [適用] をクリックします。

    Bb384575.alert_note(ja-jp,VS.90).gifメモ :

    変更を行うたびに [適用] をクリックすると、各クラスと動作の組み合わせに対して動作の構成を続行できます。[適用] をクリックする前にクラスまたは動作を変更した場合は、警告ダイアログ ボックスが表示され、ここで変更を適用できます。

    更新時に既定のランタイム ロジックを使用するように戻すには、[プロパティ] ウィンドウで、[Insert]、[Update]、または [Delete] の各コマンドの横にある省略記号をクリックし、[動作の構成] ダイアログ ボックスで [ランタイムを使用] を選択します。

参照

処理手順

チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナ)

チュートリアル : Northwind の Customers テーブル用更新ストアド プロシージャの作成

概念

DataContext メソッド (O/R デザイナ)

挿入、更新、および削除の各操作 (LINQ to SQL)

その他の技術情報

オブジェクト リレーショナル デザイナ (O/R デザイナ)

LINQ to SQL