为什么提交更改不起作用
本文关键字:不起作用 提交 为什么 | 更新日期: 2023-09-27 18:30:49
我正在使用自定义存储过程从数据库中检索数据:
tbTextBox.Text = db.getSettingValue("PropertyName").First().Value;
(db 是全局 DataClasses
对象,在 FormLoad
事件中初始化)
这部分工作完全正常,并在循环中重复(计时器上的 30 秒间隔)
如果用户更改文本框的值,则会触发以下代码:
private void tbTextBox_TextChanged(object sender, EventArgs e)
{
if (tbTextBox.Text != db.getSettingValue("PropertyName").First().Value)
{
db.Settings.Where(n => n.Name == "PropertyName").First().Value = tbTextBox.Text;
db.SubmitChanges();
}
}
如果我在submitChanges
之前创建对象并更改其值 - 相同的结果。我已经调试了它,它并不是说它永远不会通过我的 IF 语句;)
为什么它不起作用?没有例外...如果我使用 SQL Server Management Studio 查询"设置"表,则数据库中没有任何更改。
编辑1:
db.Settings.Where(n => n.Name == "AvailablePeriods").First().Value = tbPeriods.Text;
var a = db.Settings.Where(n => n.Name == "AvailablePeriods");
var b = a.First();
var c = b.Value;
b.Value = tbPeriods.Text;
var d = db.GetChangeSet();
db.SubmitChanges();
我将代码划分为较小的步骤,以便正确调试它。一切正常,但是...变更集不返回任何更新。下一步,我将尝试按照建议使用"附加"。
编辑2:添加PK解决了这个问题。现在一切都像魅力一样。
经验教训 - 我不应该太相信自己:)
直接更新数据上下文的数据不是更新表的方法。如果数据已存在,请使用附加方法;如果不存在,则使用 InsertOnSumit
此记录:
db.getSettingValue("PropertyName").First()
可能与此记录不同:
db.Settings.Where(n => n.Name == "PropertyName").First()
您在没有指定顺序的情况下调用 First,因此数据库可以选择,而不必一致地选择。
您应该在一行中执行更少的操作,以便在单步执行代码时获得更多信息。
循环重复(计时器上间隔 30 秒)
那是在不同的线程上吗? tbTextBox.Text 的值是否在执行 if 条件和 if 块之间发生了变化?