方法 : 更新、挿入、および削除を実行するストアド プロシージャを割り当てる (O/R デザイナー)
ストアド プロシージャは O/R デザイナーに追加でき、通常の DataContext メソッドとして実行できます。 これらを使用して、エンティティ クラスからデータベースに変更が保存されたときに (たとえば、SubmitChanges メソッドを呼び出したときに) 挿入、更新、および削除を実行する既定の LINQ to SQL ランタイムの動作をオーバーライドすることもできます。
注意
ストアド プロシージャが、クライアントに送信する必要のある値 (たとえば、ストアド プロシージャで計算された値) を返す場合は、ストアド プロシージャに出力パラメーターを作成します。出力パラメーターを使用できない場合は、O/R デザイナーによって生成されたオーバーライドを利用するのではなく、部分メソッドを実装します。データベースによって生成される値にマップされるメンバーは、INSERT 操作または UPDATE 操作が正常に完了した後で、適切な値に設定する必要があります。詳細については、「既定の動作をオーバーライドするときの開発者の責任」を参照してください。
注意
LINQ to SQL は、ID 列 (自動インクリメント)、rowguidcol 列 (データベースが生成した GUID)、およびタイムスタンプ列であれば、データベースによって生成された値を自動的に処理します。その他の列型のデータベースが生成した値は、予想に反して null 値になります。データベースが生成した値を返すには、手動で IsDbGenerated を true に設定し、AutoSync を Always、OnInsert、または OnUpdate のいずれかに設定する必要があります。
エンティティ クラスの更新動作の構成
既定では、LINQ to SQL エンティティ クラスのデータに対して行われた変更でデータベースを更新 (挿入、更新、および削除) するロジックは、LINQ to SQL ランタイムによって提供されます。 ランタイムは、テーブルのスキーマ (列および主キー情報) に基づいて、既定の Insert、Update、および Delete の各コマンドを作成します。 既定の動作を使用しない場合は、テーブルのデータの操作に必要な Insert、Update、および Delete を実行する特定のストアド プロシージャを割り当てることで、更新動作を構成できます。この方法は、既定の動作が生成されていない場合、たとえばエンティティ クラスがビューにマップされている場合にも実行できます。 最後に、データベースのテーブルへのアクセスには常にストアド プロシージャを通すようにすると、既定の更新動作をオーバーライドできます。
注意
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio での開発設定のカスタマイズ」を参照してください。
ストアド プロシージャを割り当てて、エンティティ クラスの既定の動作をオーバーライドするには
デザイナーで LINQ to SQL ファイルを開きます (ソリューション エクスプローラーで .dbml ファイルをダブルクリックします)。
サーバー エクスプローラーまたはデータベース エクスプローラーで、[ストアド プロシージャ] を展開し、エンティティ クラスの Insert、Update、Delete の各コマンドで使用するストアド プロシージャを探します。
ストアド プロシージャを O/R デザイナーにドラッグします。
ストアド プロシージャが DataContext メソッドとしてメソッド ペインに追加されます。 詳細については、「DataContext メソッド (O/R デザイナー)」を参照してください。
更新の実行にストアド プロシージャを使用するエンティティ クラスを選択します。
[プロパティ] ウィンドウで、オーバーライドするコマンド ([Insert]、[Update]、または [Delete]) を選択します。
[ランタイムを使用] の横にある省略記号 ([...]) をクリックして、[動作の構成] ダイアログ ボックスを開きます。
[カスタマイズ] を選択します。
[カスタマイズ] の一覧で、目的のストアド プロシージャをクリックします。
[メソッドの引数] および [クラスのプロパティ] の一覧を調べて、[メソッドの引数] が適切な [クラスのプロパティ] にマップされていることを確認します。 Update コマンドと Delete コマンドについて、元のメソッド引数 (Original_ArgumentName) を元のプロパティ (PropertyName (オリジナル)) にマップします。
注意
既定では、メソッド引数は名前が一致した場合にクラス プロパティにマップされます。変更されたプロパティ名がテーブルとエンティティ クラス間で一致しなくなり、デザイナーが正しいマッピングを判断できないときは、マップ先となる同等のクラス プロパティを選択することが必要になる場合があります。
[OK] または [適用] をクリックします。
注意
変更を行うたびに [適用] をクリックすると、各クラスと動作の組み合わせに対して動作の構成を続行できます。[適用] をクリックする前にクラスまたは動作を変更した場合は、警告ダイアログ ボックスが表示され、ここで変更を適用できます。
更新時に既定のランタイム ロジックを使用するように戻すには、[プロパティ] ウィンドウで、[Insert]、[Update]、または [Delete] の各コマンドの横にある省略記号をクリックし、[動作の構成] ダイアログ ボックスで [ランタイムを使用] を選択します。
参照
処理手順
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナー)
チュートリアル: Northwind の Customers テーブル用 Update ストアド プロシージャの作成