示例#1
0
    public override int SaveChanges()
    {
        try
        {
            // Değişen Var mı? Boya Var mı :)
            var modifiedEntities = ChangeTracker.Entries()
                                   .Where(p => p.State == EntityState.Modified).ToList();
            var now = System.DateTime.UtcNow;
            foreach (var change in modifiedEntities)
            {
                var entityName = change.Entity.GetType().Name;

                var PrimaryKey = change.OriginalValues.Properties.FirstOrDefault(prop => prop.IsPrimaryKey() == true).Name;

                foreach (IProperty prop in change.OriginalValues.Properties)
                {
                    var originalValue = change.OriginalValues[prop.Name].ToString();
                    var currentValue  = change.CurrentValues[prop.Name].ToString();

                    if (originalValue != currentValue) //Sadece Değişen kayıt Log'a atılır.
                    {
                        ChangeLog log = new ChangeLog()
                        {
                            EntityName      = entityName,
                            PrimaryKeyValue = int.Parse(change.OriginalValues[PrimaryKey].ToString()),
                            PropertyName    = prop.Name,
                            OldValue        = originalValue,
                            NewValue        = currentValue,
                            DateChanged     = now,
                            State           = EnumState.Update
                        };
                        //Değişen kayıt Log'u ElasticSearch'e atılır.
                        ElasticSearch.CheckExistsAndInsert(log);
                    }
                }
            }
            return(base.SaveChanges());
        }
        catch (Exception ex)
        {
            var error = ex.Message;
            return(0);
        }
    }