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 进程,只是分离调试器。您的代码继续 运行 并且请求完成。
这个问题有重复项,没有代表将其标记为重复项。
我在某些网站数据库代码中单步执行调试器,并在应用数据库更改之前结束执行。但是他们还是被写入了数据库!
我尝试使用 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 进程,只是分离调试器。您的代码继续 运行 并且请求完成。
这个问题有重复项,没有代表将其标记为重复项。