示例#1
0
        public OperationResult Save(TEntity entity, bool validateChilds)
        {
            var result = EngineContext.Current.Resolve <OperationResult>();

            if (entity == null)
            {
                return(result.AddError(Messages.Common_NullEntity));
            }

            if (HasNotExistsOnDatabase(entity))
            {
                return(result.AddError(Messages.Common_UnknownEntity));
            }

            result += _validationProvider.Validate(entity);

            if (result.ContainsError)
            {
                return(result);
            }

            var dbEntity = GetDatabaseVersion(entity);

            if (dbEntity != null)
            {
                entity.Id = dbEntity.Id;
            }

            try {
                if (entity.IsTransient())
                {
                    entity.Id = DateTime.UtcNow.GetTimestamp();
                    CurrentSession.Save(entity);
                }
                else
                {
                    CurrentSession.Update(entity);
                }
            } catch (Exception) {
                _activeSessionManager.RenewSession();

                return(result.AddError(Messages.Common_SaveFailed));
            }

            return(result);
        }