2009-04-30 12 views
2

私はレコードを更新するストアドプロシージャを持っており、それを実行した後レコードを削除するLinqToSqlを使用します。私はそれが変だと知っていますが、私はちょうどそれがどのように賢明なdatacontextをテストし、それがどのように動作するのか理解したいと思います。どのように私はdatacontextに伝えることができます私はストアドプロシージャを介してレコードを更新しました

datacontextは結果をキャッシュするので、それを介しての変更は記録できますが、現在はストアドプロシージャを使用して何かを更新することはできません。だから、私はそれを削除しようとすると、例外は "行が見つかりませんまたは変更"が出てくる。

私は更新した内容をdatacontextに伝えることができますか?もし私がそうすることができれば、問題は解決するでしょう。

答えて

0

私は何かが不足していると思いますが、あなたのストアドプロシージャがレコードを削除するだけであれば、Linq2Sqlを実際に触れても気にしませんか? DataContextは魔法のように削除について知りません。

+0

申し訳ありませんが、私は自分の状況を明確にしませんでした。私のストアドプロシージャは、私が次に何をするのか分からないが、私はspがすでにdbを更新していることを知っているので、SPを実行した後、私はdatacontextに私の変更を同期してください。 –

+0

ストアドプロシージャを実行してレコードを削除した後、DataContextを使って何をしていますか?あなたはより多くの詳細を投稿できますか? –

+0

私のSPはレコードを削除しないで、ただ何かを更新します。 私は何かを更新するためにdc.SP_NAMEを使用して、ちょうどそれのようなLingToSql経由で楽しみのために更新されたレコードを削除することがあります var item = dc.TableName.where(p => p.Id == id).First(); dc.TableName.DeleteOnSubmit(item); dc.SubmitChanges(); dcがサブチッチを実行している限り、例外は「行が見つからないか変更されました」とスローされます。だから私はspを実行した後で、dcに通知するためにアイテムを取得する前に何かを挿入したいと思います。 –

3

System.Data.Linq.RefreshMode列挙体を渡すDataContext Refresh()メソッドを使用できます。ここでの例です:

NorthWindDataContext context = new NorthwindDataContext(); 
context.Refresh(RefreshMode.KeepChanges); 

明確にする:
http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx">RefreshMode列挙は3を持っています値:

  1. KeepChanges
  2. KeepCurrentValues
  3. OverwriteCurrentValues

ここで使用したバージョン(KeepChanges)では、Refreshメソッドが変更された値を保持し、他の未変更値をDBの値で更新するよう強制します。

関連する問題

 関連する問題