2009-03-19 3 views
0

테이블의 레코드를 채우는 간단한 루틴이 있습니다. 실제 변경 사항이 발생한 경우에만 업데이트하려는 필드가 있습니다. 사용자가 아무 것도 변경하지 않아도 함수가 호출 될 수 있습니다. 변경 사항이 발생했는지 쉽게 알 수 있습니까? 많은 분야가있을 수 있기 때문에 오히려 등 필드 1과 myval1, FIELD2와 myval2 사이 각 관계를 확인하지 거라고, 당신은 아무것도를 취하지해야 -LINQ to SQL 레코드가 변경되었는지 알 수있는 간단한 방법이 있습니까?

Sub Edit(ByVal key as Integer, ByVal myval1 As Integer?, ByVal myval2 As Integer?) 

    Dim db As New MyDatabaseDataContext 

    Dim form = (From x In db.MyTables Where x.id = key).SingleOrDefault 

    form.field1 = myval1 
    form.field2 = myval2 

    If [???] Then 
     form.mod_date = Now 
    End If 

    db.SubmitChanges() 

End Function 

이 조금 단순화 : 여기에 기능입니다 각각에 대해 고려해야 할 부분이 있습니다. 과제가 실제로 변경된 경우 "양식"을 요청할 수있는 방법이 있습니까? 나는 아무 것도 바뀌지 않았다면 데이터베이스 업데이트를하지 않을 것이지만 그 변화를 저지르기 전에 나에게 노출되어 있다는 것을 알고있다.

답변

2

DataContext 자체에서 그런 종류의 일을 처리 할 수 ​​있습니다.

예를 들어 UpdateXXX 메서드를 사용하여 개체에 대한 변경 사항을 catch하고 날짜를 기록 할 수 있습니다.

그래서 귀하의 예제와 관련된 귀하의 DataContext에, (당신을 MyTable라는 이름의 클래스가 가정) :

Private Sub UpdateMyTable(ByVal instance As MyTable) 
    instance.mod_date = Now 
    Me.ExecuteDynamicUpdate(instance) 
End Sub 

을 지금까지 변경 사항이 만 전화를 촬영 한 경우 나, DataContext를 감지됩니다 말할 수있는 실제 업데이트를위한 그 방법 (그러나 나는 이것에 대해 틀릴 수도있다, 나는 점검 할 것이다).

0

변경 사항이있는 경우에만 수정 날짜를 설정하려는 것처럼 보입니다. 내가 처리 한 방법은 부분 클래스 구현을 사용하고 디자이너 코드의 기본 생성자에서 호출되는 OnCreated 부분 메서드에서 PropertyChanged 이벤트 처리기를 등록하는 것입니다. 속성 변경 핸들러에서 수정 데이터 필드를 업데이트합니다 (물론 업데이트되는 속성이 아닌 경우). 내 변경으로 인해 이벤트가 다시 열리지 않도록 백업 필드를 직접 설정합니다.

예 (C#은 유감 스럽지만 내 코드가 구현 된 것입니다.)

partial void OnCreated() 
{ 
    this.PropertyChanged += new PropertyChangedEventHandler(Participant_PropertyChanged); 
} 

void Participant_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName != "mod_date") 
    { 
     this._mod_date = DateTime.Now; 
    } 
}