1

클라이언트에서 발생하는 엔티티에 대한 변경 사항을 데이터베이스 테이블에 기록해야합니다. 그러나 ChangeTracker 속성을 변경하고 검사 할 때 변경이 발생하지 않았다고 주장합니다.WCF Ria Services로 엔티티 변경 사항을 추적하는 방법은 무엇입니까?

[서비스]

private static readonly ISomeDao someDao = DataAccess.SomeDao; 
    [Query] 
    public List<SomeEntity> GetSomeEntites(int someId) 
    { 
     var entities = someDao.GetSomeEntites(someId); 
     entities.ForEach(e => e.StartTracking()); 
     return entities; 
    } 

    [Update] 
    public void UpdateSomeEntity(SomeEntity entity) 
    { 
     // inspect entity.ChangeTracker.OriginalValues.... nothing 
     entity.StopTracking(); 
     // inspect entity.ChangeTracker.OriginalValues.... nothing 
     ... 
     // Update log table 
    } 

[클라이언트]

public EntitySet<SomeEntity> SomeEntities 
    { 
     get { return _someEntity; } 
     set 
     { 
      if (_someEntity!= value) 
      { 
       _someEntity= value; 
       OnPropertyChanged("SomeEntities"); 
      } 
     } 
    } 

그래서, 자기 추적 엔티티와 WCF 리아 서비스, 무엇을 인 (함께 살 수 있다면 '의심 스럽다'), 어떻게 하나의 변화가 추적됩니까?

+0

내 대답을 읽었습니까? 더 궁금한 점이 있습니까? 행운을 빕니다! –

답변

1

RIA 서비스는 사용하지 말고 WCF 만 사용하십시오 (많은 차이가 있는지 모르겠 음 ...). 먼저 EntityTracking에 명령 (서버 측)을 실행할 필요가 없습니다. 이것은 WCF에 의해 deserialize와 함께 자동으로 수행됩니다. 내가 알고있는 두 번째

[OnDeserialized] 
public void OnDeserializedMethod(StreamingContext context) 
{ 
    IsDeserializing = false; 
    ChangeTracker.ChangeTrackingEnabled = true; 
} 

가 변경 될 때 SELF 추적 개체의 일차 및 외래 키 속성이 기록되어 있다는 것입니다. 엔티티 컨텍스트에서 계속 살고있는 NORMAL 엔티티의 경우는 그렇지 않습니다 (모든 변경 사항이 기록됩니다).

[DataMember] 
    public string Plaats 
    { 
     get { return _plaats; } 
     set 
     { 
      if (_plaats != value) 
      { 
       _plaats = value; 
       OnPropertyChanged("Plaats"); 
      } 
     } 
    } 
    private string _plaats; 

    [DataMember] 
    public int LandID 
    { 
     get { return _landID; } 
     set 
     { 
      if (_landID != value) 
      { 
       ChangeTracker.RecordOriginalValue("LandID", _landID); 
       if (!IsDeserializing) 
       { 
        if (Land != null && Land.ID != value) 
        { 
         Land = null; 
        } 
       } 
       _landID = value; 
       OnPropertyChanged("LandID"); 
      } 
     } 
    } 
    private int _landID; 

당신이 차이를 보이나요 : 당신은 자동 추적 - 엔티티에 대해 자세히 살펴 경우

이 같은 것을 볼 수 있는가? 간단한 속성 Plaats와 외래 ​​키 속성 LandID? 그것은 Line`ChangeTracker.RecordOriginalValue ("LandID", _LANID)에 있습니다;

간단한 속성의 경우 이러한 변경 내용이 기록되지 않습니다 (속성 변경 내용이 취소되어 EF 컨텍스트에서 ApplyChanges를 수정하고 데이터베이스를 업데이트하는 방법을 알 수 있음).

가능한 아이디어가 될 수있다 :

  1. 당신이에 의해 원래의 값을 기록하기위한 몇 가지 프레임 워크를 바칠 수있는 기본 클래스에서 모든 엔티티를 도출하기 위해 모든 재산
  2. 에 대한 원래 값을 기록 T4 템플릿을 사용자 정의하려면 하여 PropertyChanged 이벤트에 응답
  3. 먼저 변경

를 데이터베이스에서 원래 값을 받고 추적의 entites를 업데이트 희망이 도움이!

관련 문제