CustomViewEngine.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Admin.NET.Core.Util;
  2. using Furion.ViewEngine;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace Admin.NET.Core.Service
  6. {
  7. public class CustomViewEngine : ViewEngineModel
  8. {
  9. private readonly SqlSugarRepository<SysCodeGen> _sysCodeGenRep; // 代码生成器仓储
  10. public CustomViewEngine()
  11. {
  12. }
  13. public CustomViewEngine(SqlSugarRepository<SysCodeGen> sysCodeGenRep)
  14. {
  15. _sysCodeGenRep = sysCodeGenRep;
  16. }
  17. /// <summary>
  18. /// 库定位器
  19. /// </summary>
  20. public string DbConfigId { get; set; } = SqlSugarConst.ConfigId;
  21. public string AuthorName { get; set; }
  22. public string BusName { get; set; }
  23. public string NameSpace { get; set; }
  24. public string ClassName { get; set; }
  25. public string LowerClassName
  26. {
  27. get
  28. {
  29. return ClassName[..1].ToLower() + ClassName[1..]; // 首字母小写
  30. }
  31. }
  32. public List<CodeGenConfig> QueryWhetherList { get; set; }
  33. public List<CodeGenConfig> TableField { get; set; }
  34. public bool IsJoinTable { get; set; }
  35. public bool IsUpload { get; set; }
  36. private List<TableColumnOuput> ColumnList { get; set; }
  37. public string GetColumnNetType(object tbName, object colName)
  38. {
  39. ColumnList = GetColumnListByTableName(tbName.ToString());
  40. var col = ColumnList.Where(c => c.ColumnName == colName.ToString()).FirstOrDefault();
  41. //多库代码生成切库调用后切换回原库
  42. _sysCodeGenRep.Context.AsTenant().ChangeDatabase(SqlSugarConst.ConfigId);
  43. return col.NetType;
  44. }
  45. public List<TableColumnOuput> GetColumnListByTableName(string tableName)
  46. {
  47. //多库代码生成切换库
  48. if (DbConfigId != SqlSugarConst.ConfigId)
  49. _sysCodeGenRep.Context.AsTenant().ChangeDatabase(DbConfigId);
  50. // 获取实体类型属性
  51. var entityType = _sysCodeGenRep.Context.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  52. if (entityType == null) return null;
  53. // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
  54. return _sysCodeGenRep.Context.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
  55. {
  56. ColumnName = u.DbColumnName,
  57. ColumnKey = u.IsPrimarykey.ToString(),
  58. DataType = u.DataType.ToString(),
  59. NetType = CodeGenUtil.ConvertDataType(u.DataType.ToString()),
  60. ColumnComment = u.ColumnDescription
  61. }).ToList();
  62. }
  63. }
  64. }