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); }