为什么提交更改不起作用

本文关键字:不起作用 提交 为什么 | 更新日期: 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 块之间发生了变化?