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进程,只需分离调试器即可。 您的代码继续运行,请求完成。
这个问题有重复,没有代表将此标记为重复。