CustomViewEngine.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. namespace Admin.NET.Core.Service;
  10. public class CustomViewEngine : ViewEngineModel
  11. {
  12. private readonly ISqlSugarClient _db;
  13. public CustomViewEngine()
  14. {
  15. }
  16. public CustomViewEngine(ISqlSugarClient db)
  17. {
  18. _db = db;
  19. }
  20. /// <summary>
  21. /// 库定位器
  22. /// </summary>
  23. public string ConfigId { get; set; } = SqlSugarConst.ConfigId;
  24. public string AuthorName { get; set; }
  25. public string BusName { get; set; }
  26. public string NameSpace { get; set; }
  27. public string ClassName { get; set; }
  28. public string ProjectLastName { get; set; }
  29. public string LowerClassName
  30. {
  31. get
  32. {
  33. return ClassName[..1].ToLower() + ClassName[1..]; // 首字母小写
  34. }
  35. }
  36. public List<CodeGenConfig> QueryWhetherList { get; set; }
  37. public List<CodeGenConfig> TableField { get; set; }
  38. public bool IsJoinTable { get; set; }
  39. public bool IsUpload { get; set; }
  40. private List<ColumnOuput> ColumnList { get; set; }
  41. public string GetColumnNetType(object tbName, object colName)
  42. {
  43. var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId == ConfigId);
  44. ColumnList = GetColumnListByTableName(tbName.ToString());
  45. var col = ColumnList.Where(c => (config.DbSettings.EnableUnderLine
  46. ? CodeGenUtil.CamelColumnName(c.ColumnName, Array.Empty<string>())
  47. : c.ColumnName) == colName.ToString()).FirstOrDefault();
  48. return col.NetType;
  49. }
  50. public List<ColumnOuput> GetColumnListByTableName(string tableName)
  51. {
  52. // 多库代码生成切换库
  53. var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.ConfigId ? ConfigId : SqlSugarConst.ConfigId);
  54. // 获取实体类型属性
  55. var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  56. // 因为ConfigId的表通常也会用到主库的表来做连接,所以这里如果在ConfigId中找不到实体也尝试一下在主库中查找
  57. if (ConfigId == SqlSugarConst.ConfigId && entityType == null) return null;
  58. if (ConfigId != SqlSugarConst.ConfigId)
  59. {
  60. provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
  61. entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  62. if (entityType == null) return null;
  63. }
  64. // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
  65. return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
  66. {
  67. ColumnName = u.DbColumnName,
  68. ColumnKey = u.IsPrimarykey.ToString(),
  69. DataType = u.DataType.ToString(),
  70. NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
  71. ColumnComment = u.ColumnDescription
  72. }).ToList();
  73. }
  74. }