private static void context_SavingChanges(object sender, EventArgs e) { // Find any new or modified entities using our user/timestampting // fields and update them accordingly. foreach (ObjectStateEntry entry in ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries (EntityState.Added | EntityState.Modified)) { // Only work with entities that have our user/timestamp records in them. try { if (!entry.IsRelationship) { CurrentValueRecord entryValues = entry.CurrentValues; System.Collections.Specialized.NameValueCollection updateField = CheckEntityUpdateField(entry.CurrentValues); HttpContext currContext = HttpContext.Current; int userId = -1; DateTime now = DateTime.Now; if (currContext != null) { if (currContext.User.Identity.IsAuthenticated) { if (currContext.Session != null && currContext.Session["userId"] != null) { userId = (int)currContext.Session["userId"]; } else { //userId = Security.GetUserId(currContext.User.Identity.Name); } } } if (entry.State == EntityState.Modified) { if (updateField["updater_id"] == "true") { entryValues.SetInt32(entryValues.GetOrdinal("updater_id"), userId); } if (updateField["updated_at"] == "true") { entryValues.SetDateTime(entryValues.GetOrdinal("updated_at"), now); } } if (entry.State == EntityState.Added) { // If creator/updater values have not already been set, // default them to the current user/time. We will already have // creator/updater for version records. for (int x = 0; x < updateField.Count; x++) { string key = updateField.Keys[x]; if (key.Contains("_id") && updateField[x] == "true") { // Sometimes when a new object is created, the creator_id is defaulted // to 0. This is invalid for our processing. if (entryValues.IsDBNull(entryValues.GetOrdinal(key)) || entryValues.GetInt32(entryValues.GetOrdinal(key)) == 0 ) { entryValues.SetInt32(entryValues.GetOrdinal(key), userId); } } else if (updateField.Keys[x].Contains("_at") && updateField[x] == "true") { // Sometimes when a new object is created, the year is defaulted to // 1/1/0001. This is an invalid year or our processing if (entryValues.IsDBNull(entryValues.GetOrdinal(key)) || entryValues.GetDateTime(entryValues.GetOrdinal(key)).Year == 1 ) { entryValues.SetDateTime(entryValues.GetOrdinal(key), now); } } } } } } catch (Exception ex) { //Elmah.ErrorSignal.FromCurrentContext().Raise(ex); } } }