2011-02-01 11 views
1

linq 2 sqlのストアドプロシージャでデータを更新するのはちょっと混乱します。 私の質問は:私はデータベース内のいくつかのデータを更新するためにストアドプロシージャを使用すると(しかし、これは プロシージャが特定のエンティティにマップされていない)、私はそれの後にSubmitChangesを呼び出します。また、ループでこのようなプロシージャーをいくつか呼び出すと、トランザクションについてはどうでしょうか。明示的にConnection.BeginTransaction()メソッドを介してトランザクションを作成するか、モデルでそれを行いますか?Linq-to-SQLは更新レコードのカスタムストアドプロシージャを実行します

また、モデル内のいくつかのエンティティにリンクされたストアドプロシージャがどのように動作するのか知っていますが、今は多数のテーブルのレコードを更新するカスタムストアドプロシージャを使用しません。

ありがとうございました!

+0

Linq-to-SQLはストアドプロシージャとよくインターフェースしません - もしsprocsの使用を真剣に考えているなら、.NET 4のEntity Frameworkにアップグレードすることをお勧めします。そこにprocs! –

+0

@ marc_s、Linq-to-SQLとストアドプロシージャとのインターフェースがうまくいかないのはどうですか? –

+0

@ Kirk Woll:まず第一に、モデル内のエンティティに正確に対応しないストアドプロシージャから結果セットを返すことはできません(EFはこれを、特定の「複合型」を定義する機能によってサポートしています) 2番目に、ストアドプロシージャはL2Sでしか実行できませんが、EF4では、INSERT、UPDATE、DELETE操作の各エンティティタイプにストアドプロシージャを割り当てることができます(たとえば、ストアドプロシージャをDELETEに割り当てて、 SQLコードのステージメントを生成して他の操作を処理するEF4) –

答えて

3

ストアドプロシージャとLINQ to SQLによる非エンティティデータの更新は非常に簡単です。ただ、DBMLデザイナで空きスペースにサーバーエクスプローラからストアドプロシージャをドラッグします(そのためには、エンティティオブジェクトを返すようにしようとはしません)、このようなあなたのコードに関連付けられている生成されたメソッドを呼び出します。

myDataContext.MyStoredProcedureMethod(); 

アクションすぐに実行されるため、SubmitChanges()を呼び出す必要はありません。

LINQ to SQLトランザクションでこの呼び出し(またはループなど)をラップするには、LINQ to SQLトランザクションの使用方法についてinstructions and examples hereを参照してください。

関連する問題