AutoInit.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using JLHHJSvr.LJException;
  2. using System;
  3. using System.Data.SqlClient;
  4. using System.Diagnostics;
  5. using System.Text;
  6. namespace JLHHJSvr.Tools
  7. {
  8. public class AutoInit
  9. {
  10. public static void AutoInitS <T>(SqlCommand cmd, T instance){
  11. cmd.CommandText = @"SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName";
  12. cmd.Parameters.Clear();
  13. cmd.Parameters.AddWithValue("@tableName", instance.GetType().Name);
  14. using (var reader = cmd.ExecuteReader())
  15. {
  16. while (reader.Read())
  17. {
  18. var column = Convert.ToString(reader["COLUMN_NAME"]).Trim();
  19. var isNullable = Convert.ToString(reader["IS_NULLABLE"]).Trim();
  20. var property = instance.GetType().GetProperty(column);
  21. if(property == null)
  22. {
  23. //throw new LJCommonException($"数据库字段:{column}在模型中找不到相关属性!");
  24. continue;
  25. }
  26. if (isNullable.Equals("NO") && property.GetValue(instance) == null)
  27. {
  28. var type = property.PropertyType;
  29. if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
  30. {
  31. type = type.GetGenericArguments()[0];
  32. }
  33. if (type.IsAssignableFrom(typeof(string)))
  34. {
  35. property.SetValue(instance, "");
  36. }
  37. else if (type.IsAssignableFrom(typeof(int))
  38. || type.IsAssignableFrom(typeof(decimal))
  39. || type.IsAssignableFrom(typeof(byte)))
  40. {
  41. property.SetValue(instance, Activator.CreateInstance(type));
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }
  48. }