Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }