USING 块在网站与 windows 表单中的行为不同

USING block behaves differently in website vs windows form

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

我尝试使用 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>

我在断点处结束执行(Shift+F5),before第二个调试打印或 SubmitChanges() 被执行。 "Line 2" 不是 输出到调试 window,但数据库更改

运行 Windows 表单中的相同测试确实表现相同。

页面生命周期或会话管理是否以某种方式干扰了这里?这怎么可能,第 2 行没有打印出来!

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

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

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