예제 #1
0
 private static KeyValuePair<string, string> BuildKeyRepresentation(EntityEntry entityEntry, string seperator)
 {
     var keyProperties = entityEntry.Metadata.GetProperties().Where(x => x.IsPrimaryKey()).ToList();
     if (keyProperties == null)
         throw new ArgumentException("No key found in");
     var keyPropertyEntries =
         keyProperties.Select(keyProperty => entityEntry.Property(keyProperty.Name)).ToList();
     var keyNameString = new StringBuilder();
     foreach (var keyProperty in keyProperties)
     {
         keyNameString.Append(keyProperty.Name);
         keyNameString.Append(seperator);
     }
     keyNameString.Remove(keyNameString.Length - 1, 1);
     var keyValueString = new StringBuilder();
     foreach (var keyPropertyEntry in keyPropertyEntries)
     {
         keyValueString.Append(keyPropertyEntry.CurrentValue);
         keyValueString.Append(seperator);
     }
     keyValueString.Remove(keyValueString.Length - 1, 1);
     var key = keyNameString.ToString();
     var value = keyValueString.ToString();
     return new KeyValuePair<string, string>(key, value);
 }
예제 #2
0
        public void Members_check_arguments()
        {
            Assert.Equal(
                "stateEntry",
                // ReSharper disable once AssignNullToNotNullAttribute
                Assert.Throws<ArgumentNullException>(() => new EntityEntry(null)).ParamName);

            Assert.Equal(
                "stateEntry",
                // ReSharper disable once AssignNullToNotNullAttribute
                Assert.Throws<ArgumentNullException>(() => new EntityEntry<Random>(null)).ParamName);

            var entry = new EntityEntry(new Mock<StateEntry>().Object);

            Assert.Equal(
                Strings.FormatArgumentIsEmpty("propertyName"),
                Assert.Throws<ArgumentException>(() => entry.Property("")).Message);

            var genericEntry = new EntityEntry<Random>(new Mock<StateEntry>().Object);

            Assert.Equal(
                "propertyExpression",
                // ReSharper disable once AssignNullToNotNullAttribute
                Assert.Throws<ArgumentNullException>(() => genericEntry.Property((Expression<Func<Random, int>>)null)).ParamName);
        }
    /// <summary>Audit entity deleted.</summary>
    /// <param name="objectStateEntry">The object state entry.</param>
        public static void AuditEntityDeleted(AuditEntry entry, EntityEntry objectStateEntry)
        {
            foreach (var propertyEntry in objectStateEntry.Metadata.GetProperties())
            {
                var property = objectStateEntry.Property(propertyEntry.Name);

                if (entry.Parent.CurrentOrDefaultConfiguration.IsAuditedProperty(entry.Entry, propertyEntry.Name))
                {
                    entry.Properties.Add(new AuditEntryProperty(entry, propertyEntry.Name, property.OriginalValue, null));
                }
            }
        }
예제 #4
0
        private static IEnumerable<CustomAuditLog> GetAuditLogs(EntityEntry entityEntry, string userName, EntityState entityState)
        {
            var returnValue = new List<CustomAuditLog>();
            // var keyRepresentation = BuildKeyRepresentation(entityEntry, KeySeperator);
            DateTime RightNow = DateTime.Now;
            Guid AuditBatchID;
            UuidCreateSequential(out AuditBatchID);

            var auditedPropertyNames =
                entityEntry.Entity.GetType()
                    .GetProperties().Where(p => !p.GetCustomAttributes(typeof(DoNotAudit), true).Any())
                    .Select(info => info.Name);

            var differences = new List<PropertyDiff>();

            foreach (var propertyEntry in entityEntry.Metadata.GetProperties()
                           .Where(x => auditedPropertyNames.Contains(x.Name))
                           .Select(property => new { PropertyName = property.Name, Property = entityEntry.Property(property.Name) }))
            {
                var originalValue = Convert.ToString(propertyEntry.Property.OriginalValue);
                var currentValue = Convert.ToString(propertyEntry.Property.CurrentValue);

                if (entityState == EntityState.Modified && originalValue == currentValue) //Values are the same, don't log
                    continue;

                var diff = new PropertyDiff { PropertyName = propertyEntry.PropertyName, OriginalValue = originalValue, NewValue = currentValue } ;
                differences.Add(diff);

            }
            var ser = JsonConvert.SerializeObject(differences);

            returnValue.Add(new CustomAuditLog
            {
                Differences = ser,
                EventDateTime = RightNow,
                EventType = entityState.ToString(),
                UserName = userName,
                TableName = entityEntry.Entity.GetType().Name
            });
            return returnValue;
        }
예제 #5
0
        private static IEnumerable<AuditLog> GetAuditLogs(EntityEntry entityEntry, string userName, EntityState entityState)
        {
            var returnValue = new List<AuditLog>();
            var keyRepresentation = BuildKeyRepresentation(entityEntry, KeySeperator);

            var auditedPropertyNames =
                entityEntry.Entity.GetType()
                    .GetProperties().Where(p => !p.GetCustomAttributes(typeof (DoNotAudit), true).Any())
                    .Select(info => info.Name);
            foreach (var propertyEntry in entityEntry.Metadata.GetProperties()
                .Where(x => auditedPropertyNames.Contains(x.Name))
                .Select(property => entityEntry.Property(property.Name)))
            {
                if(entityState == EntityState.Modified)
                    if (Convert.ToString(propertyEntry.OriginalValue) == Convert.ToString(propertyEntry.CurrentValue)) //Values are the same, don't log
                        continue;
                returnValue.Add(new AuditLog
                {
                    KeyNames = keyRepresentation.Key,
                    KeyValues = keyRepresentation.Value,
                    OriginalValue = entityState != EntityState.Added
                        ? Convert.ToString(propertyEntry.OriginalValue)
                        : null,
                    NewValue = entityState == EntityState.Modified || entityState == EntityState.Added
                        ? Convert.ToString(propertyEntry.CurrentValue)
                        : null,
                    ColumnName = propertyEntry.Metadata.Name,
                    EventDateTime = DateTime.Now,
                    EventType = entityState.ToString(),
                    UserName = userName,
                    TableName = entityEntry.Entity.GetType().Name
                });
            }
            return returnValue;
        }
예제 #6
0
        public void Can_get_property_entry_by_lambda()
        {
            var stateEntryMock = CreateStateEntryMock();
            var entry = new EntityEntry<Chunky>(stateEntryMock.Object);

            Assert.Equal("Monkey", entry.Property(e => e.Monkey).Name);
        }
예제 #7
0
        public void Can_get_property_entry_by_name()
        {
            var stateEntryMock = CreateStateEntryMock();
            var entry = new EntityEntry<Random>(stateEntryMock.Object);

            Assert.Equal("Monkey", entry.Property("Monkey").Name);
        }