2009-06-29 21 views
3

我試圖擴展由VS設計器生成的linqtosql類,並需要確定特定字段的值是否已更改。有沒有辦法讓我訪問表/實體的DataContext Update方法中字段的值之前和之後?實現linqtosql部分DataContext類 - 如何檢查之前/之後的值

這裏是我的代碼:

public partial class DataClassesDataContext 
{ 
    partial void UpdateActivity(Activity instance) 
    { 
     this.ExecuteDynamicUpdate(instance); 
     //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has 
    } 
} 

我也開來添加一個屬性到活動實體類的信號值是否已經改變,但我無法弄清楚如何判斷價值有改變那裏要麼。我不能只使用Activity類的OnAssignedToChanged方法,因爲只要設置了屬性值就會觸發,而不一定會改變。我使用ListView和LINQDataSource控件進行更新,因此無論如何它都被設置。

我也認爲我可以使用OnAssignedToChanging方法,但Activity實例在該點上似乎沒有當前值。以下代碼不能像這樣工作.AssignedTo始終爲空。

partial void OnAssignedToChanging(int? value) 
{ 
    if (value != this.AssignedTo) 
    { 
     _reassigned = true; 
    } 
} 

回答

9

你應該能夠做到這一點:

public partial class DataClassesDataContext 
{ 
    partial void UpdateActivity(Activity instance) 
    { 
     Activity originalActivity = Activities.GetOriginalEntityState(instance); 
     if (instance.Property != originalActivity.Property) 
     { 
      // Do stuff 
     } 
     this.ExecuteDynamicUpdate(instance); 
     //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has 
    } 
} 

另一種選擇:

public partial class DataClassesDataContext 
{ 
    partial void UpdateActivity(Activity instance) 
    { 
     ModifiedMemberInfo[] changes = Activities.GetModifiedMembers(instance); 
     foreach (var change in changes) 
     { 
      Console.WriteLine("Member: {0}, Orig: {1}, New: {2}", change.Member, change.OriginalValue, change.CurrentValue); 
     } 

     this.ExecuteDynamicUpdate(instance); 
     //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has 
    } 
} 

我剛住進你的其他選項(OnAssignedToChanging(int? value)),它似乎工作罰款我。你確定初始值不是實際爲空嗎?我用一個新的對象以及一個從數據庫中提取的對象來測試它,它似乎能正常工作。

+0

部分方法? ;) – Kezzer 2009-07-01 15:53:45

相關問題