You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
4.1 KiB

3 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Apewer.Source
  5. {
  6. /// <summary>表示在解析数据模型过程中发生的错误。</summary>
  7. [Serializable]
  8. public class ModelException : Exception
  9. {
  10. const string EmptyMessage = "(无消息)";
  11. string _msg = null;
  12. Type _model = null;
  13. /// <summary>获取描述当前异常的消息。</summary>
  14. public override string Message { get => _msg; }
  15. /// <summary>数据模型的类型。</summary>
  16. public Type Model { get => _model; }
  17. /// <summary>初始化 <see cref="ModelException"/> 类的新实例。</summary>
  18. /// <param name="message">描述当前异常的消息。</param>
  19. /// <param name="model">数据模型的类型。</param>
  20. public ModelException(string message, Type model = null)
  21. {
  22. _msg = string.IsNullOrEmpty(message) ? EmptyMessage : message;
  23. _model = model;
  24. }
  25. /// <summary>表示数据模型类型无效的异常实例。</summary>
  26. public static ArgumentNullException InvalidType() => new ArgumentNullException("数据模型的类型无效。");
  27. /// <summary>表示数据模型结构无效的异常实例。</summary>
  28. /// <param name="model">数据模型。</param>
  29. public static ModelException InvalidStructure(Type model)
  30. {
  31. if (model == null) return new ModelException("数据模型的类型无效。");
  32. return new ModelException($"类型 <{model.Name}> 的数据模型结构无效。");
  33. }
  34. /// <summary>表示表名称无效的异常实例。</summary>
  35. /// <param name="model">数据模型。</param>
  36. public static ModelException InvalidTableName(Type model)
  37. {
  38. if (model == null) return new ModelException("数据模型的类型无效。");
  39. return new ModelException($"类型 <{model.Name}> 不包含表名称。");
  40. }
  41. /// <summary>表示丢失了 Key 字段的异常实例。</summary>
  42. /// <param name="model">数据模型。</param>
  43. public static ModelException MissingKey(Type model)
  44. {
  45. if (model == null) return new ModelException("数据模型的类型无效。");
  46. return new ModelException($"类型 <{model.Name}> 不包含 Key 属性的字段。");
  47. }
  48. /// <summary>表示丢失了 Flag 字段的异常实例。</summary>
  49. /// <param name="model">数据模型。</param>
  50. public static ModelException MissingFlag(Type model)
  51. {
  52. if (model == null) return new ModelException("数据模型的类型无效。");
  53. return new ModelException($"类型 <{model.Name}> 不包含 Flag 属性的字段。");
  54. }
  55. /// <summary>表示表名称无效的异常实例。</summary>
  56. public static ModelException InvalidTableName<TModel>() => InvalidTableName(typeof(TModel));
  57. /// <summary>表示丢失了 Key 字段的异常实例。</summary>
  58. public static ModelException MissingKey<TModel>() => MissingKey(typeof(TModel));
  59. /// <summary>表示丢失了 Flag 字段的异常实例。</summary>
  60. public static ModelException MissingFlag<TModel>() => MissingFlag(typeof(TModel));
  61. }
  62. /// <summary>表示在解析数据模型过程中发生的错误。</summary>
  63. [Serializable]
  64. public class ModelException<TModel> : ModelException
  65. {
  66. /// <summary>初始化 <see cref="ModelException"/> 类的新实例。</summary>
  67. /// <param name="message">描述当前异常的消息。</param>
  68. public ModelException(string message) : base(message, typeof(TModel)) { }
  69. /// <summary>表示表名称无效的异常实例。</summary>
  70. public static ModelException InvalidTableName() => InvalidTableName(typeof(TModel));
  71. /// <summary>表示丢失了 Key 字段的异常实例。</summary>
  72. public static ModelException MissingKey() => MissingKey(typeof(TModel));
  73. /// <summary>表示丢失了 Flag 字段的异常实例。</summary>
  74. public static ModelException MissingFlag() => MissingFlag(typeof(TModel));
  75. }
  76. }