Find out which fields are being updated.

I am using LINQ To SQL to update the user address. I am trying to keep track of which fields have been updated.

The GetChangeSet() method just tells me that I am updating the entity but don’t know which fields.

What else do I need?

 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) { } } 
+4
source share
2 answers

Use ITable.GetModifiedMembers . It returns an array of ModifiedMemberInfo objects, one for each changed object property. ModifiedMemberInfo contains CurrentValue and OriginalValue , showing you what exactly has changed. This is a very convenient LINQ to SQL function.

Example:

 ModifiedMemberInfo[] modifiedMembers = context.YourTable.GetModifiedMembers(yourEntityObject); foreach (ModifiedMemberInfo mmi in modifiedMembers) { Console.WriteLine(string.Format("{0} --> {1}", mmi.OriginalValue, mmi.CurrentValue)); } 
+3
source

You can detect updates by watching change notifications. Notifications are provided through PropertyChanging or PropertyChanged events in property installers.

eg. you can extend your generated class Ecs_TblUserAddresses as follows:

 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 } } 

Alternatively, if you want to track the change of a special property, you can use one of those OnPropertyNameChanging partial methods, for example. (for the city in your example):

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

Source: https://habr.com/ru/post/1340840/


All Articles