方法 : 更新、挿入、および削除を実行するストアド プロシージャを割り当てる (O/R デザイナ)
更新 : November 2007
ストアド プロシージャは O/R デザイナに追加でき、通常の DataContext メソッドとして実行できます。これらを使用して、エンティティ クラスからデータベースに変更が保存されたときに (たとえば、SubmitChanges メソッドを呼び出したときに) 挿入、更新、および削除を実行する既定の LINQ to SQL ランタイムの動作をオーバーライドすることもできます。
メモ : |
---|
ストアド プロシージャが、クライアントに送信する必要のある値 (たとえば、ストアド プロシージャで計算された値) を返す場合は、ストアド プロシージャに出力パラメータを作成します。出力パラメータを使用できない場合は、O/R デザイナによって生成されたオーバーライドを利用するのではなく、部分メソッドを実装します。データベースによって生成される値にマップされるメンバは、INSERT 操作または UPDATE 操作が正常に完了した後で、適切な値に設定する必要があります。詳細については、「既定の動作をオーバーライドするときの開発者の責任 (LINQ to SQL)」を参照してください。 |
メモ : |
---|
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 テーブル用更新ストアド プロシージャの作成