private static ValidationMessageCollection OnUpdateFailedFunc(IRepository repository, DbUpdateConcurrencyException dbUpdateEx, DepartmentUpdate.CommandModel commandModel, ref byte[] rowVersion) { var validationMessages = new ValidationMessageCollection(); var entry = dbUpdateEx.Entries.Single(); var databaseEntry = entry.GetDatabaseValues(); if (databaseEntry == null) { validationMessages.Add(string.Empty, "Unable to save changes. The department was deleted by another user."); return validationMessages; } var databaseValues = (Department)databaseEntry.ToObject(); rowVersion = databaseValues.RowVersion; if (databaseValues.Name != commandModel.Name) validationMessages.Add(nameof(commandModel.Name), "Current value: " + databaseValues.Name); if (databaseValues.Budget != commandModel.Budget) validationMessages.Add(nameof(commandModel.Budget), "Current value: " + string.Format("{0:c}", databaseValues.Budget)); if (databaseValues.StartDate != commandModel.StartDate) validationMessages.Add(nameof(commandModel.StartDate), "Current value: " + string.Format("{0:d}", databaseValues.StartDate)); if (databaseValues.InstructorID != commandModel.InstructorID) validationMessages.Add(nameof(commandModel.InstructorID), "Current value: " + repository.GetEntity<Instructor>(p => p.ID == databaseValues.InstructorID.Value).FullName); validationMessages.Add(string.Empty, "The record you attempted to edit " + "was modified by another user after you got the original value. The " + "edit operation was canceled and the current values in the database " + "have been displayed. If you still want to edit this record, click " + "the Save button again. Otherwise click the Back to List hyperlink."); return validationMessages; }
/// <summary> /// Validates the specified property name. /// </summary> /// <param name="propertyName">Name of the property.</param> /// <param name="value">The value.</param> /// <param name="validationContext">The validation context.</param> /// <returns> /// The list of validation messages. /// </returns> public override ValidationMessageCollection Validate(string propertyName, object value, string validationContext) { ValidationMessageCollection messages = base.Validate(propertyName, value, validationContext); if (propertyName == nameof(this.Price) && value is decimal) { if ((decimal)value != this.Items.Sum(x => x.Price)) { messages.Add(new ValidationMessage("MustEqualSum", "The order price must match the sum of the item prices.", Array.Empty <object>(), this, propertyName)); } } return(messages); }
public static ValidationMessageCollection Save( this IRepository repository, EntityStateWrapperContainer entityContainer, Func <DbUpdateConcurrencyException, ValidationMessageCollection> dbUpdateConcurrencyExceptionFunc = null, Func <RetryLimitExceededException, ValidationMessageCollection> retryLimitExceededExceptionFunc = null) { try { entityContainer.UnitsOfWork().ToList().ForEach(uow => { UpdateStates(repository, uow); repository.Save(); }); return(new ValidationMessageCollection()); } catch (DbUpdateConcurrencyException dbUpdateEx) { Logger.Warn(dbUpdateEx, dbUpdateEx.Message); if (dbUpdateConcurrencyExceptionFunc != null) { return(dbUpdateConcurrencyExceptionFunc(dbUpdateEx)); } var validationDetails = new ValidationMessageCollection(); validationDetails.Add(new ValidationMessage(string.Empty, dbUpdateEx.ToString())); return(validationDetails); } catch (RetryLimitExceededException rleEx) { Logger.Error(rleEx, rleEx.Message); if (retryLimitExceededExceptionFunc != null) { return(retryLimitExceededExceptionFunc(rleEx)); } var validationDetails = new ValidationMessageCollection(); validationDetails.Add(new ValidationMessage(string.Empty, "Unable to save changes. Try again, and if the problem persists, see your system administrator.")); return(validationDetails); } catch (Exception ex) { Logger.Error(ex, ex.Message); throw; } }
private static ValidationMessageCollection OnUpdateFailedFunc(IRepository repository, DbUpdateConcurrencyException dbUpdateEx, DepartmentUpdate.CommandModel commandModel, ref byte[] rowVersion) { var validationMessages = new ValidationMessageCollection(); var entry = dbUpdateEx.Entries.Single(); var databaseEntry = entry.GetDatabaseValues(); if (databaseEntry == null) { validationMessages.Add(string.Empty, "Unable to save changes. The department was deleted by another user."); return(validationMessages); } var databaseValues = (Department)databaseEntry.ToObject(); rowVersion = databaseValues.RowVersion; if (databaseValues.Name != commandModel.Name) { validationMessages.Add(nameof(commandModel.Name), "Current value: " + databaseValues.Name); } if (databaseValues.Budget != commandModel.Budget) { validationMessages.Add(nameof(commandModel.Budget), "Current value: " + string.Format("{0:c}", databaseValues.Budget)); } if (databaseValues.StartDate != commandModel.StartDate) { validationMessages.Add(nameof(commandModel.StartDate), "Current value: " + string.Format("{0:d}", databaseValues.StartDate)); } if (databaseValues.InstructorID != commandModel.InstructorID) { validationMessages.Add(nameof(commandModel.InstructorID), "Current value: " + repository.GetEntity <Instructor>(p => p.ID == databaseValues.InstructorID.Value).FullName); } validationMessages.Add(string.Empty, "The record you attempted to edit " + "was modified by another user after you got the original value. The " + "edit operation was canceled and the current values in the database " + "have been displayed. If you still want to edit this record, click " + "the Save button again. Otherwise click the Back to List hyperlink."); return(validationMessages); }
private void ValidateOneAdministratorAssignmentPerInstructor() { if (Context.CommandModel.InstructorID == null) { return; } var queryRepository = ResolveService <IQueryRepository>(); var duplicateDepartment = queryRepository.GetEntity <Department>( p => p.InstructorID == Context.CommandModel.InstructorID.Value, new AsNoTrackingQueryStrategy(), new EagerLoadingQueryStrategy <Department>(p => p.Administrator), false); if (duplicateDepartment != null) { string errorMessage = $"Instructor {duplicateDepartment.Administrator.FirstMidName} {duplicateDepartment.Administrator.LastName} " + $"is already administrator of the {duplicateDepartment.Name} department."; ValidationMessageCollection.Add(string.Empty, errorMessage); } }
public void TestException() { ValidationMessageCollection messages = new ValidationMessageCollection(); IValidatable source = new Example(); messages.Add(new ValidationMessage("messageKey", "defaultMessage: {0}{1}", new string[] { "X", "Y" }, source, "PropertyA", ValidationLevel.Warning, ValidationContext.Default, 5)); try { throw new ValidationException(messages); } catch (ValidationException ex) { Assert.IsNotNull(ex); Assert.AreEqual(1, ex.ValidaitonMessages.Count); Assert.AreEqual("defaultMessage: XY", ex.ValidaitonMessages[0].Message); Assert.AreEqual(source, ex.ValidaitonMessages[0].ValidationSource); Assert.AreEqual("PropertyA", ex.ValidaitonMessages[0].PropertyName); Assert.AreEqual(ValidationLevel.Warning, ex.ValidaitonMessages[0].ValidationLevel); Assert.AreEqual(5, ex.ValidaitonMessages[0].ValidationPriority); Assert.AreEqual(ValidationContext.Default, ex.ValidaitonMessages[0].ValidationContext); } }
public void TestValidationMessageCollection() { var message1 = new ValidationMessage("message1", "Test1 {0}.", new object[] { 5 }, new Example(), "Property1", ValidationLevel.Error, "Validation context 2", 0); var message2 = new ValidationMessage("message2", "Test2 {0}.", new object[] { 5 }, new Example(), "Property2", ValidationLevel.Error, "Validation context 2", 0); var message3 = new ValidationMessage("message3", "Test3 {0}.", new object[] { 5 }, new Example(), "Property3", ValidationLevel.Error, "Validation context 2", 0); var message4 = new ValidationMessage("message4", "Test4 {0}.", new object[] { 5 }, new Example(), "Property4", ValidationLevel.Info, "Validation context 2", 0); var message5 = new ValidationMessage("message5", "Test5 {0}.", new object[] { 5 }, message4.ValidationSource, "Property4", ValidationLevel.Warning, "Validation context 2", 0); var messages = new ValidationMessageCollection(); messages.Add(message1); messages.Add(message2); messages.Add(message3); messages.Insert(messages.Count, message4); Assert.AreEqual(message1, messages[0]); Assert.AreEqual(message2, messages[1]); Assert.AreEqual(message3, messages[2]); Assert.AreEqual(message4, messages[3]); Assert.AreEqual(1, messages[message1.ValidationSource, "Property1", "Validation context 2"].Count); Assert.AreEqual(message1, messages[message1.ValidationSource, "Property1", "Validation context 2"][0]); Assert.AreEqual(1, messages[message3.ValidationSource, message3.PropertyName, "Validation context 2"].Count); Assert.AreEqual(message3, messages[message3.ValidationSource, message3.PropertyName, "Validation context 2"][0]); Assert.AreEqual(0, messages[null as IValidatable].Count); Assert.AreEqual(0, messages[null as IValidatable, null as string].Count); Assert.AreEqual(0, messages[null as IValidatable, "aaa" as string].Count); Assert.AreEqual(0, messages[new Example() as IValidatable, null as string].Count); Assert.IsFalse(messages.Contains(null)); Assert.IsTrue(messages.Contains(message3)); messages.Add(message5); Assert.AreEqual(4, messages.Count); Assert.AreEqual(message5, messages.Last()); messages[3] = message4; Assert.AreEqual(4, messages.Count); Assert.AreEqual(message1, messages[0]); Assert.AreEqual(message2, messages[1]); Assert.AreEqual(message3, messages[2]); Assert.AreEqual(message4, messages[3]); var validationSource = new Example(); var message6 = new ValidationMessage("message1", "Test1 {0}.", new object[] { 7 }, validationSource, "Property1", ValidationLevel.Error, null, 0); var message7 = new ValidationMessage("message2", "Test2 {0}.", new object[] { 8 }, validationSource, "Property1", ValidationLevel.Error, null, 0); var message8 = new ValidationMessage("message3", "Test3 {0}.", new object[] { 9 }, validationSource, "Property2", ValidationLevel.Error, "Validation context 2", 0); messages.Add(message6); messages.Add(message7); messages.Insert(messages.Count, message8); var mergedMessage = messages.Merge(validationSource, "Property1"); Assert.AreEqual("Test1 7.\r\nTest2 8.", mergedMessage.Message); Assert.AreEqual(ValidationLevel.Error, mergedMessage.ValidationLevel); MergedValidationMessage.GetMergedMessages = x => string.Join(" * ", x); var mergedMessage2 = messages.Merge(validationSource, "Property1"); Assert.AreEqual("Test1 7. * Test2 8.", mergedMessage2.Message); Assert.AreEqual(ValidationLevel.Error, mergedMessage2.ValidationLevel); var mergedMessage4 = messages.Merge(validationSource, "Property2"); Assert.AreEqual("Test3 9.", mergedMessage4.Message); Assert.AreEqual(ValidationLevel.Error, mergedMessage4.ValidationLevel); var mergedMessage5 = messages.Merge(validationSource); Assert.AreEqual("Test1 7. * Test2 8. * Test3 9.", mergedMessage5.Message); Assert.AreEqual(ValidationLevel.Error, mergedMessage5.ValidationLevel); MergedValidationMessage.GetMergedMessages = null; }