为什么SubmitChanges不起作用?

时间:2012-04-11 14:29:51

标签: c# sql winforms linq

我正在使用自定义存储过程从我的数据库中检索数据:

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查询“设置”表,则数据库中没有任何更改。

EDIT1:

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();   

我已将代码分成较小的步骤以便正确调试。一切正常,但...... Changeset不返回任何更新。对于下一步,我将尝试按照建议使用“附加”。

EDIT2: 添加PK解决了这个问题。现在一切都像魅力一样。

经验教训 - 我不应该太相信自己:)

2 个答案:

答案 0 :(得分:3)

直接更新数据上下文的数据不是更新表的方法。如果数据已存在,请使用Attach Method;如果数据不存在,则使用InsertOnSumit

答案 1 :(得分:1)

此记录:

db.getSettingValue("PropertyName").First()

可能与此记录不同:

db.Settings.Where(n => n.Name == "PropertyName").First()

您在没有指定订单的情况下调用First - 因此数据库可以选择,而且不必一致地选择。


您应该在一行中执行更少操作,以便在逐步执行代码时获得更多信息。


  

它在循环中重复(定时器间隔30秒)

这是在另一个线程上吗? tbTextBox.Text的值是否在执行if-criteria和if-block之间发生变化?