AutoInit.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. }
  25. if (isNullable.Equals("NO") && property.GetValue(instance) == null)
  26. {
  27. var type = property.PropertyType;
  28. if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
  29. {
  30. type = type.GetGenericArguments()[0];
  31. }
  32. if (type.IsAssignableFrom(typeof(string)))
  33. {
  34. property.SetValue(instance, "");
  35. }
  36. else if (type.IsAssignableFrom(typeof(int))
  37. || type.IsAssignableFrom(typeof(decimal))
  38. || type.IsAssignableFrom(typeof(byte)))
  39. {
  40. property.SetValue(instance, Activator.CreateInstance(type));
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }