示例#1
0
        //private DateTime GetDateTimeNow()
        //{
        //    using (var resolver = Bootstrapper.Instance.IocManager.GetResolver())
        //    {
        //        var dateTimeProvider = resolver.Resolve<IDateTimeProvider>();
        //        return dateTimeProvider.GetNow();
        //    }
        //}
        public DbChangeResult SaveChage()
        {
            var  entrys     = _dbContext.ChangeTracker.Entries();
            bool changeFlag = false;//默认没有更改
            List <ValidationResult> validationResults = new List <ValidationResult>();

            foreach (var item in entrys)
            {
                if (item.State != EntityState.Unchanged)
                {
                    changeFlag = true;
                    if (item.Entity is IUpdateTimeField)
                    {
                        var updateTimeField = item.Entity as IUpdateTimeField;
                        //GetDateTimeNow();
                        updateTimeField.UpdateTime = DateTime.Now;
                    }
                }

                var validateList = ValidatorHelper.GetValidationResult(item.Entity);
                if (validateList != null && validateList.Count > 0)
                {
                    validationResults.AddRange(validateList);
                }
            }

            if (!changeFlag)
            {
                return(new DbChangeResult(true));
            }
            if (validationResults.Count > 0)
            {
                return(new DbChangeResult(0, false, validationResults.Select(m => new InvalidateException(m))));
            }
            try
            {
                int changeNum = _dbContext.SaveChanges();
                if (_dbChangeEventHandler.Disable)
                {
                    if (changeNum > 0)
                    {
                        foreach (var item in entrys)
                        {
                            switch (item.State)
                            {
                            case EntityState.Deleted:
                                _dbChangeEventHandler.OnEntityDeleted(item.Entity);
                                break;

                            case EntityState.Modified:
                                _dbChangeEventHandler.OnEntityModified(item.Entity);
                                break;

                            case EntityState.Added:
                                _dbChangeEventHandler.OnEntityAdded(item.Entity);
                                break;

                            case EntityState.Unchanged:
                            case EntityState.Detached:
                            default:
                                break;
                            }
                        }
                    }
                }
                return(new DbChangeResult(changeNum, changeNum > 0));
            }
            catch (Exception ex)
            {
                _logger.LogWarning(ex, ex.Message);
                return(new DbChangeResult(0, false, new List <Exception>()
                {
                    ex
                }));
            }
        }