CustomViewEngine.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  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. var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == ConfigId);
  41. ColumnList = GetColumnListByTableName(tbName.ToString());
  42. var col = ColumnList.Where(c => (config.DbSettings.EnableUnderLine
  43. ? CodeGenUtil.CamelColumnName(c.ColumnName, Array.Empty<string>())
  44. : c.ColumnName) == colName.ToString()).FirstOrDefault();
  45. return col.NetType;
  46. }
  47. public List<ColumnOuput> GetColumnListByTableName(string tableName)
  48. {
  49. // 多库代码生成切换库
  50. var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.MainConfigId ? ConfigId : SqlSugarConst.MainConfigId);
  51. // 获取实体类型属性
  52. var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  53. // 因为ConfigId的表通常也会用到主库的表来做连接,所以这里如果在ConfigId中找不到实体也尝试一下在主库中查找
  54. if (ConfigId == SqlSugarConst.MainConfigId && entityType == null) return null;
  55. if (ConfigId != SqlSugarConst.MainConfigId)
  56. {
  57. provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.MainConfigId);
  58. entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  59. if (entityType == null) return null;
  60. }
  61. // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
  62. return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
  63. {
  64. ColumnName = u.DbColumnName,
  65. ColumnKey = u.IsPrimarykey.ToString(),
  66. DataType = u.DataType.ToString(),
  67. NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
  68. ColumnComment = u.ColumnDescription
  69. }).ToList();
  70. }
  71. }