private static IEnumerable<Tuple<string, object, object>> GetUpdatedEntityValues(ObjectStateEntry entry) { foreach (string propname in entry.GetModifiedProperties()) { object newval = entry.CurrentValues[propname]; object oldval = entry.OriginalValues[propname]; yield return Tuple.Create(propname, newval, oldval); } }
/// <summary> /// Tracks the properties. /// </summary> /// <param name="objectStateEntry">The object state entry.</param> protected void TrackProperties(ObjectStateEntry objectStateEntry) { foreach (string propertyName in objectStateEntry.GetModifiedProperties()) { if (!IsStoreGenerated(propertyName, objectStateEntry)) { var auditProperty = new TrackingAuditEntityProperty(propertyName, objectStateEntry); if (auditProperty.HasChanges) { AuditEntityProperties.Add(auditProperty); } } } }
internal static RepositoryMonitorEvent EventFromEntryState(DiscoDataContext Database, DbEntityEntry entityEntry, ObjectStateEntry entryState) { RepositoryMonitorEventType eventType; string[] modifiedProperties = null; Dictionary<string, object> entityKey = null; Type entityType; switch (entryState.State) { case System.Data.EntityState.Added: eventType = RepositoryMonitorEventType.Added; break; case System.Data.EntityState.Deleted: eventType = RepositoryMonitorEventType.Deleted; break; case System.Data.EntityState.Detached: eventType = RepositoryMonitorEventType.Detached; break; case System.Data.EntityState.Modified: eventType = RepositoryMonitorEventType.Modified; break; case System.Data.EntityState.Unchanged: eventType = RepositoryMonitorEventType.Unchanged; break; default: throw new NotSupportedException(string.Format("Database Entry State not supported: {0}", entryState.State.ToString())); } entityType = EntityTypeFromProxy(entryState.Entity.GetType()); // Only pass modified properties on Modified Event if (eventType == RepositoryMonitorEventType.Modified) modifiedProperties = entryState.GetModifiedProperties().ToArray(); else modifiedProperties = new string[] { }; // Empty array for Added/Deleted. // Don't pass entity key when entity newly added if (eventType != RepositoryMonitorEventType.Added) entityKey = DetermineEntityKey(entryState); return new RepositoryMonitorEvent() { EventType = eventType, Entity = entryState.Entity, EntityKey = entityKey, EntityType = entityType, ModifiedProperties = modifiedProperties, Database = Database, dbEntityState = entityEntry, objectEntryState = entryState }; }
private string getModifiedColumns(ObjectStateEntry entry) { List<string> props = entry.GetModifiedProperties().ToList(); StringBuilder serialXML = new StringBuilder(); XmlSerializer ser = new XmlSerializer(props.GetType()); using (XmlWriter xWriter = XmlWriter.Create(serialXML)) { ser.Serialize(xWriter, props); xWriter.Flush(); } return serialXML.ToString(); ; }