2012-04-11 6 views
2

나는 사용자 지정 저장 프로 시저를 사용하여 내 데이터베이스에서 데이터를 검색 해요 :왜 SubmitChanges가 작동하지 않습니까?

tbTextBox.Text = db.getSettingValue("PropertyName").First().Value; 

이 부분이 완전히 잘 작동하고 반복 것 (데시벨은 FormLoad 이벤트에서 초기화 글로벌 DataClasses 객체이다) 다음 코드 루프 (타이머 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를 추가하면 문제가 해결되었습니다. 모든 것이 이제는 매력으로 작동합니다.

수업은 배운 - 너무 많이 자신을 신뢰하지해야합니다 :)

+1

datacontext 로그의 내용은 무엇입니까? – leppie

+1

내 IF 문을 통과하지 못하는 것 같아요. '- 이벤트 처리기가 실행 중이고 상태가 평가되고 있는지 여부를 디버깅하고 확인 했습니까? –

+0

그것은 싫어 ... 오타 - 미안. –

답변

3

데이터 컨텍스트의 직접 데이터를 업데이트하면 테이블을 업데이트 할 수 없습니다. 데이터가 이미 존재하는 경우 Attach Method을 사용하고 그렇지 않으면 InsertOnSumit을 사용하십시오.

1

이 기록 :

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

:

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

가능성이 레코드와 동일하지 않습니다 주문을 지정하지 않고 First를 호출합니다. 따라서 데이터베이스가 선택되고 일관성을 선택할 필요가 없습니다. 와이.


코드를 단계별로 실행할 때 더 많은 정보를 얻을 수 있도록 한 줄을 줄여야합니다.


이 루프 (타이머 30 초 간격)으로 반복있어

다른 스레드 즉? tbTextBox.Text의 값이 if-criteria와 if-block의 실행 사이에서 변경 되었습니까?

+0

이 테이블에는 두 행만 있으므로 두 레코드가 동일합니다. 또한 첫 번째 열은 고유하므로 앞으로는 오해하지 않을 것입니다. –

+0

그리고 First()를 사용하여 디버거/컴파일러에게 하나의 객체라고 알려주므로 손에 VALUE를 얻을 수 있습니다 :) –

+0

후속 쿼리가 코드에 영향을 미치는지 보려면 TIMER를 비활성화하십시오 ... –