【发布时间】:2010-06-25 17:46:35
【问题描述】:
在 .NET 4.0 和 Linq to SQL 中,我尝试使用部分类从更新方法(现有 DBML 方法)中“触发”更改。为简单起见,想象一个带有列 Id 和 Value 的表格 Things
自动生成 DBML 包含一个方法 OnValueChanged,我将对其进行扩展,并作为练习尝试更改另一行中的一个值:
public partial class Things
{
partial void OnValueChanged()
{
MyAppDataContext dc = new MyAppDataContext();
var q = from o in dc.GetTable<Things>() where o.Id == 13 select o;
foreach (Things o in q)
{
o.Value = "1"; // try to change some other row
}
try
{
dc.SubmitChanges();
}
catch (Exception)
{
// SQL timeout occurs
}
}
}
发生 SQL 超时错误。我怀疑数据上下文在当前 OnValueChanged() 方法处理它的数据上下文之前尝试 SubmitChanges() 会感到困惑,但我不确定。
在现有的 DBML 生成方法中,我通常找不到触发数据库更新的良好模式示例。
任何人都可以提供任何关于为什么这不起作用以及我如何完成可以正常工作的事情的指示吗? (我意识到我可以在 SQL 数据库中触发,但不想走那条路。)
谢谢!
【问题讨论】:
标签: c# .net linq-to-sql datacontext