カスタムストアドプロシージャを使用してデータベースからデータを取得しています。
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ステートメントを決して通過しないようではありません;)
なぜ機能しないのですか?例外はありません...SQLServer 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();
正しくデバッグするために、コードを小さなステップに分割しました。すべて正常に動作しますが...チェンジセットは更新を返しません。次のステップでは、提案されているように「添付」を使用してみます。
EDIT2: PKを追加すると問題が解決しました。今ではすべてが魅力として機能します。
学んだ教訓-私は自分自身をあまり信用してはいけません:)