public void GetModifiedMembers() { var db = CreateDB(); var customer = db.Customers.First(); string beforeCountry = customer.Country; string afterCountry = "Spain"; customer.Country = afterCountry; string beforeFax = customer.Fax; string afterFax = "4823-435-6456"; customer.Fax = afterFax; ModifiedMemberInfo[] modifiedInfoList = db.Customers.GetModifiedMembers(customer); Assert.AreEqual(modifiedInfoList.Count(), 2); ModifiedMemberInfo modInfo = modifiedInfoList.First(); Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Country")); Assert.AreEqual(modInfo.CurrentValue, afterCountry); Assert.AreEqual(modInfo.OriginalValue, beforeCountry); modInfo = modifiedInfoList.ElementAt(1); Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Fax")); Assert.AreEqual(modInfo.CurrentValue, afterFax); Assert.AreEqual(modInfo.OriginalValue, beforeFax); }
private static AuditProperty CreateAuditProperty(MetaDataMember dataMember, ModifiedMemberInfo modifiedMemberInfo, object entity, AuditEntity auditEntity) { var auditProperty = new AuditProperty(); try { auditProperty.MetaDataMember = dataMember; auditProperty.Name = dataMember.Member.Name; Type underlyingType = GetUnderlyingType(dataMember.Type); auditProperty.Type = underlyingType.FullName; if (auditProperty.Type == _binaryType || dataMember.IsDeferred) { return(auditProperty); } if (auditEntity.Action == AuditAction.Update && modifiedMemberInfo.Member != null) { auditProperty.Current = GetValue(modifiedMemberInfo.Member, underlyingType, modifiedMemberInfo.CurrentValue, entity); auditProperty.Original = GetValue(modifiedMemberInfo.Member, underlyingType, modifiedMemberInfo.OriginalValue, entity); return(auditProperty); } var value = GetValue(dataMember.Member, underlyingType, dataMember.MemberAccessor.GetBoxedValue(entity), entity); if (value == null) { return(null); // ignore null properties? } if (auditEntity.Action == AuditAction.Delete) { auditProperty.Original = value; } else { auditProperty.Current = value; } } catch (Exception ex) { Trace.TraceError(ex.Message); if (auditEntity.Action == AuditAction.Delete) { auditProperty.Original = "{error}"; } else { auditProperty.Current = "{error}"; } } return(auditProperty); }