2011-02-22 2 views
4

사용자 주소를 업데이트하기 위해 LINQ To SQL을 사용하고 있습니다. 업데이트 된 필드를 추적하려고합니다.업데이트되는 필드 확인

GetChangeSet() 메서드는 엔티티를 업데이트하는 중이라고 알려주지 만 어떤 필드를 알려주지 않습니다.

그 밖의 무엇이 필요합니까?

var item = context.Dc.Ecs_TblUserAddresses.Single(a => a.ID == updatedAddress.AddressId); 

//ChangeSet tracking 
item.Address1 = updatedAddress.AddressLine1; 
item.Address2 = updatedAddress.AddressLine2; 
item.Address3 = updatedAddress.AddressLine3; 
item.City = updatedAddress.City; 
item.StateID = updatedAddress.StateId; 
item.Zip = updatedAddress.Zip; 
item.Zip4 = updatedAddress.Zip4; 
item.LastChangeUserID = request.UserMakingRequest; 
item.LastChangeDateTime = DateTime.UtcNow; 

ChangeSet set = context.Dc.GetChangeSet(); 

foreach (var update in set.Updates) 
{ 
    if (update is EberlDataContext.EberlsDC.Entities.Ecs_TblUserAddress) 
    { 

    } 
} 
+0

이 답변 중 하나가 당신을 도와나요? 옆에있는 체크 표시를 선택하여 응답을 수락하십시오. – shaunmartin

답변

0

변경 사항에 대한 알림을 통해 업데이트를 검색 할 수 있습니다. 알림은 속성 설정자의 PropertyChanging 또는 PropertyChanged 이벤트를 통해 제공됩니다.

예. 당신은 다음과 같이 생성 된 Ecs_TblUserAddresses 클래스를 확장 할 수

public partial class Ecs_TblUserAddresses 
{ 
    partial void OnCreated() 
    { 
     this.PropertyChanged += new PropertyChangedEventHandler(User_PropertyChanged); 
    } 

    protected void User_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     string propertyName = e.PropertyName; 
     // do what you want 
    } 
} 

을 양자 택일로, 당신은 특별한 속성 변화를 추적하려는 경우, 당신은 예를 들어, 그 OnPropertyNameChanging 부분 방법 중 하나를 사용할 수 있습니다 (예 :시) :

partial void OnCityChanging(string value) 
{ 
    // value parameter holds a new value 
} 
3

ITable.GetModifiedMembers을 사용하십시오. 엔티티의 각 수정 된 속성에 대해 하나씩 ModifiedMemberInfo 개의 객체 배열을 반환합니다. ModifiedMemberInfo에는 CurrentValueOriginalValue이 포함되어있어 변경된 사항을 정확히 보여줍니다. 그것은 매우 편리한 LINQ to SQL 기능입니다.

예 :

ModifiedMemberInfo[] modifiedMembers = context.YourTable.GetModifiedMembers(yourEntityObject); 

foreach (ModifiedMemberInfo mmi in modifiedMembers) 
{ 
    Console.WriteLine(string.Format("{0} --> {1}", mmi.OriginalValue, mmi.CurrentValue)); 
}