我正在逐步调试某些网站数据库代码中的调试器,并在应用数据库更改之前结束执行。但他们仍然写入数据库!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>
我最终执行在断点处(移 + F5),第二调试打印或SubmitChanges()
之前得到执行。 “第2行”是而不是输出到调试窗口,但数据库更改都是作出的。
在Windows窗体中运行相同的测试的行为相同。
页面生命周期或会话管理在某种程度上干扰了吗?这怎么可能,第二行没有打印!
您是否在Windows窗体上收到错误/异常,它不起作用? – raidensan
@raidensan我会重写它。它行为不一样。它不会将更改写入数据库(因为我在'Submit'调用之前中止了这个操作,所以我预料它不应该这样做)。 – Ian
在你的例子中做“抛出新的Exception()”而不是“Debug.WriteLine(”Line 2“)”,看看它是如何发生的。 – Evk