internal override void AddError(DataModelItem item, string propertyName, string errorMessage, int errorCode)
 {
     RaiseDataModelValidationEvent(
         new DataModelErrorEventArgs
             {
                 ErrorCode = errorCode,
                 ErrorMessage = errorMessage,
                 Item = item,
                 PropertyName = propertyName,
             }
         );
 }
 internal abstract void AddWarning(DataModelItem item, string propertyName, string errorMessage, int errorCode);
 /// <summary>
 ///     Get the related rules given certain DataModelItem
 /// </summary>
 /// <param name = "itemToValidate"> The <see cref = "DataModelItem" /> to validate </param>
 /// <returns> A collection of <see cref = "DataModelValidationRule" /> </returns>
 internal IEnumerable<DataModelValidationRule> GetRules(DataModelItem itemToValidate)
 {
     return _rules.Where(r => r.ValidatedType.IsAssignableFrom(itemToValidate.GetType()));
 }
 internal abstract void Evaluate(DataModelValidationContext context, DataModelItem item);
 internal override void AddWarning(DataModelItem item, string propertyName, string errorMessage, int errorCode)
 {
     throw new NotImplementedException();
 }