2013-01-31 56 views
1

當前在我的應用程序中,我正在記錄用戶更改的任何值,這很好。我有一個類的對象MyObjectLogs對象和每個屬性我提出一個事件這樣:Property Change Logging

private string _occupation; 
[FieldAlias("_occupation")] 
public string Occupation 
{ 
    get { return _occupation; } 
    set 
    { 
     if (this.Occupation != value) 
     { 
      string oldValue = Occupation; 
      _occupation = value; 
      NotifyPropertyChanged("Occupation", oldValue, value); 
     } 
    } 
} 

MyObject類也實現INotifyPropertyChanged和我有以下事件:

public event PropertyChangedEventHandler PropertyChanged; 

private void NotifyPropertyChanged<T>(string propertyName, T oldValue, T newValue) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new Helper.PropertyChangedExtendedEventArgs<T>(propertyName, oldValue, newValue)); 
    } 

    this.Logs.Add(new Logs 
    { 
     CreatedDate = DateTime.Now, 
     CreatedBy = this.ModifiedBy, 
     PropertyName = propertyName, 
     NewValue = (newValue != null) ? newValue.ToString() : "", 
     OldValue = (oldValue != null) ? oldValue.ToString() : "" 

    }); 
} 

一切正常除了他上面的CreatedBy字段。由於它來自MyObject'sModifiedBy屬性,更新不會立即發生,因爲當時該字段將包含以前的用戶名(希望它有意義)。

我該如何反映所發生的變化,我無法在ModifiedBy屬性上提升事件,因爲它將在Logs表中創建一個新行,那麼還有其他選項嗎?

+0

也許您可以在實際更改修改者的步驟中添加日誌記錄。這是鏈接對列表的所有更改,並記錄所有更改,當修改發生改變時。無論是或者你將不得不首先更改ModifiedBy屬性 – TYY

+0

在哪裏設置了ModifiedBy? – JosephHirn

+0

@Ginosaji它在MyObject中作爲屬性設置。 – Zaki

回答

1

以這種方式結束使用當前用戶的緩存,它會正確更新它。