private ValidationDictionary <ViewModelArticleCategory> SaveArticleCategory(int clientId, ViewModelArticleCategory viewModelArticleCategory) { var validator = new ValidationDictionary <ViewModelArticleCategory>(); if (viewModelArticleCategory == null) { validator.IsValid = false; validator.AddError("", "The XX you're trying to save is null"); return(validator); } // rule based here var existingWithSameName = _articleCategoryRepository .FilterBy(o => o.ArticleCategoryName.ToLower() == viewModelArticleCategory.ArticleCategoryName.ToLower() && o.ClientId == clientId && !o.IsDeleted) .ToList(); if (existingWithSameName.Any()) { var haveSameId = viewModelArticleCategory.ArticleCategoryId <= 0 || (viewModelArticleCategory.ArticleCategoryId > 0 && existingWithSameName.Any(o => o.ArticleCategoryId != viewModelArticleCategory.ArticleCategoryId)); if (haveSameId) { validator.IsValid = false; validator.AddError("", "Article Category with same name is already existed"); return(validator); } } ArticleCategory articleCategory; if (viewModelArticleCategory.ArticleCategoryId > 0) { articleCategory = _articleCategoryRepository .FindBy(o => o.ArticleCategoryId == viewModelArticleCategory.ArticleCategoryId && o.ClientId == clientId); var dateCreated = articleCategory.DateCreated; articleCategory.InjectFrom(viewModelArticleCategory); articleCategory.ClientId = clientId; articleCategory.DateLastUpdated = DateTime.UtcNow; articleCategory.DateCreated = dateCreated; _articleCategoryRepository.Update(articleCategory); } else { articleCategory = new ArticleCategory(); articleCategory.InjectFrom(viewModelArticleCategory); articleCategory.ClientId = clientId; articleCategory.DateCreated = DateTime.UtcNow; articleCategory.DateLastUpdated = DateTime.UtcNow; _articleCategoryRepository.Add(articleCategory); } var rawPinged = _articleCategoryRepository .FindBy(o => o.ArticleCategoryId == articleCategory.ArticleCategoryId && o.ClientId == clientId); var pinged = new ViewModelArticleCategory().InjectFrom(rawPinged) as ViewModelArticleCategory; validator.IsValid = true; validator.RelatedObject = pinged; return(validator); }