2016-04-29 9 views
5

私は一部のウェブサイトのデータベースコードでデバッガをステップ実行し、データベースの変更が適用される前に実行を終了しました。しかし、彼らはまだデータベースに書かれていました!USINGブロックはウェブサイトとウィンドウの動作が異なります

Windowsフォームアプリケーションを使用して問題を再現しようとしましたが、データベースに書き込まれませんでした(予期した動作)。私はウェブサイトに戻り、でした。

ここには簡単な例のページがあります。

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Diagnostics" %> 

<!DOCTYPE html> 

<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     using (MsSqlDataContextDataContext db = new MsSqlDataContextDataContext()) 
     { 
      Product product = db.Products.First(p => p.id == 21); 
      Debug.WriteLine("Line 1"); 
      // I learnt the hard way that if you try to update the database with the value 
      // that already exists, it seems to get optimised away. 
      // The update must a new value. 
      product.Type = "bogus" + DateTime.UtcNow.Ticks; 
      Debug.WriteLine("Line 2"); // <- Breakpoint here 
      db.SubmitChanges(); 
     } 
    } 
</script> 

<html> 
<head runat="server"> 
</head> 
</html> 

私は前二デバッグプリントやSubmitChanges()を実行します、ブレークポイントで(Shiftキー + F5)実行を終了:私はそれが違いを行う場合のウェブサイトでこれを実行しています。 "行2"はで、デバッグウィンドウに出力されないですが、データベースの変更はです。です。

Windowsフォームで同じテストを実行すると同じ動作をします。

ページのライフサイクル、またはセッション管理が何らかの理由でここに干渉していませんか?これはどのように可能なのですか、2行目は印刷されません!

+0

Windowsフォームでエラー/例外が発生しましたが、どのように機能しませんか? – raidensan

+0

@raidensan私はそれに言い換えるつもりです。それは同じように振る舞いません。データベースに変更を書き込まない(私が 'Submit'呼び出しの前に打ち切ったとすると、私は期待しなかった)。 – Ian

+0

あなたの例では "Debug.WriteLine(" Line 2 ")"の代わりに "Exception()"を投げ、それがどうなるかを見てください。 – Evk

答えて

6

winformアプリケーションでデバッグを停止すると、プロセスが終了し、コードの実行が停止します。

asp.netではこれは当てはまりません。デバッガを停止すると(通常は)、iisプロセスは終了せず、デバッガをデタッチするだけです。コードは実行を継続し、要求は完了します。

この質問には重複があり、重複としてマークする担当者はいません。

+0

良い説明、私は検索しましたが、原因がわかりにくいことはわかりません。もし私が偽薬を見つけて、自分自身に旗を掲げることができるかどうかを見てみましょう:)または私に偽薬をリンクさせて、私はそれにフラグを立てます。 – Ian

+0

正確な重複はありません:[リンク](http://stackoverflow.com/questions/1338785/the-asp-net-code-still-executes-after-clicking-stopping-debugging-in-vs2008)プロセスを終了する) – apr

関連する問題