USING块在网站与Windows窗体中的行为不同

我在一些网站数据库代码中单步执行调试器,并在应用数据库更改之前结束执行。 但他们仍然写入数据库!

我尝试使用Windows窗体应用程序重新创建问题,但它没有写入数据库(预期的行为)。 我回到了网站,它做到了

这是一个简单的示例页面。 如果它有所不同,我在网站运行它:

    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(); } }      

在第二次调试打印或SubmitChanges()执行之前 ,我在断点处结束执行( Shift + F5 )。 “第2行” 不会输出到调试窗口,但会进行数据库更改。

在Windows窗体中运行相同的测试确实表现相同。

页面生命周期或会话管理是否在某种程度上干扰了这里? 这怎么可能,2号线不打印!

当您在winform应用程序中停止调试时,该过程正在终止,您的代码将停止执​​行。

在asp.net中并非如此。 当您停止调试器(通常)时,它不会终止iis进程,只需分离调试器即可。 您的代码继续运行,请求完成。

这个问题有重复,没有代表将此标记为重复。