CustomViewEngine.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
  2. //
  3. // 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
  4. namespace Admin.NET.Core.Service;
  5. public class CustomViewEngine : ViewEngineModel
  6. {
  7. private readonly ISqlSugarClient _db;
  8. public CustomViewEngine()
  9. {
  10. }
  11. public CustomViewEngine(ISqlSugarClient db)
  12. {
  13. _db = db;
  14. }
  15. /// <summary>
  16. /// 库定位器
  17. /// </summary>
  18. public string ConfigId { get; set; } = SqlSugarConst.MainConfigId;
  19. public string AuthorName { get; set; }
  20. public string BusName { get; set; }
  21. public string NameSpace { get; set; }
  22. public string ClassName { get; set; }
  23. public string ProjectLastName { get; set; }
  24. public string LowerClassName
  25. {
  26. get
  27. {
  28. return ClassName[..1].ToLower() + ClassName[1..]; // 首字母小写
  29. }
  30. }
  31. public bool IsJoinTable { get; set; }
  32. public bool IsUpload { get; set; }
  33. public string PrintType { get; set; }
  34. public string PrintName { get; set; }
  35. public List<CodeGenConfig> QueryWhetherList { get; set; }
  36. public List<CodeGenConfig> TableField { get; set; }
  37. private List<ColumnOuput> ColumnList { get; set; }
  38. public string GetColumnNetType(object tbName, object colName)
  39. {
  40. if (tbName == null || colName == null) return null;
  41. var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == ConfigId);
  42. ColumnList = GetColumnListByTableName(tbName.ToString());
  43. var col = ColumnList.Where(c => (config.DbSettings.EnableUnderLine
  44. ? CodeGenUtil.CamelColumnName(c.ColumnName, Array.Empty<string>())
  45. : c.ColumnName) == colName.ToString()).FirstOrDefault();
  46. return col.NetType;
  47. }
  48. public List<ColumnOuput> GetColumnListByTableName(string tableName)
  49. {
  50. // 多库代码生成切换库
  51. var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.MainConfigId ? ConfigId : SqlSugarConst.MainConfigId);
  52. // 获取实体类型属性
  53. var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  54. // 因为ConfigId的表通常也会用到主库的表来做连接,所以这里如果在ConfigId中找不到实体也尝试一下在主库中查找
  55. if (ConfigId == SqlSugarConst.MainConfigId && entityType == null) return null;
  56. if (ConfigId != SqlSugarConst.MainConfigId)
  57. {
  58. provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.MainConfigId);
  59. entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  60. if (entityType == null) return null;
  61. }
  62. // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
  63. return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
  64. {
  65. ColumnName = u.DbColumnName,
  66. ColumnKey = u.IsPrimarykey.ToString(),
  67. DataType = u.DataType.ToString(),
  68. NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
  69. ColumnComment = u.ColumnDescription
  70. }).ToList();
  71. }
  72. }