From 69d8c915b8c1b67c59b59c939d2018a00c3ba676 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 28 Nov 2022 21:06:37 +0800 Subject: [PATCH] Update oracle dbfirst bug --- .../DbFirstProvider/DbFirstProvider.cs | 8 +++ Src/Asp.Net/SqlSugar/Entities/DbColumnInfo.cs | 1 + .../DbMaintenance/OracleDbMaintenance.cs | 53 +++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs index a6b7718e0..abe98d9da 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs @@ -445,6 +445,14 @@ namespace SqlSugar { result = result + "?"; } + if (item.OracleDataType.EqualCase("raw") && item.Length == 16) + { + return "Guid"; + } + if (item.OracleDataType.EqualCase("number") && item.Length == 1&&item.Scale==0) + { + return "bool"; + } return result; } private string GetPropertyTypeConvert(DbColumnInfo item) diff --git a/Src/Asp.Net/SqlSugar/Entities/DbColumnInfo.cs b/Src/Asp.Net/SqlSugar/Entities/DbColumnInfo.cs index 00dfb5b00..427fdf3aa 100644 --- a/Src/Asp.Net/SqlSugar/Entities/DbColumnInfo.cs +++ b/Src/Asp.Net/SqlSugar/Entities/DbColumnInfo.cs @@ -11,6 +11,7 @@ namespace SqlSugar public string DbColumnName { get; set; } public string PropertyName { get; set; } public string DataType { get; set; } + public string OracleDataType { get; set; } public Type PropertyType { get; set; } public int Length { get; set; } public string ColumnDescription { get; set; } diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs index d0557b6a4..45f91f1ce 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs @@ -367,6 +367,7 @@ namespace SqlSugar private List GetColumnInfosByTableName(string tableName) { + List columns = GetOracleDbType(tableName); string sql = "select * /* " + Guid.NewGuid() + " */ from " + SqlBuilder.GetTranslationTableName(tableName) + " WHERE 1=2 "; this.Context.Utilities.RemoveCache>("DbMaintenanceProvider.GetFieldComment."+tableName); this.Context.Utilities.RemoveCache>("DbMaintenanceProvider.GetPrimaryKeyByTableNames." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower()); @@ -392,12 +393,64 @@ namespace SqlSugar Length = row["ColumnSize"].ObjToInt(), Scale = row["numericscale"].ObjToInt() }; + var current = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(column.DbColumnName)); + if (current != null) + { + column.OracleDataType = current.DataType; + if (current.DataType.EqualCase("number")) + { + column.Length = row["numericprecision"].ObjToInt(); + column.Scale = row["numericscale"].ObjToInt(); + column.DecimalDigits = row["numericscale"].ObjToInt(); + if (column.Length == 38 && column.Scale==0) + { + column.Length = 22; + } + } + } result.Add(column); } return result; } } + private List GetOracleDbType(string tableName) + { + var sql0 = $@"select + t1.table_name as TableName, + t6.comments, + t1.column_id, + t1.column_name as DbColumnName, + t5.comments, + t1.data_type as DataType, + t1.data_length as Length, + t1.char_length, + t1.data_precision, + t1.data_scale, + t1.nullable, + t4.index_name, + t4.column_position, + t4.descend + from user_tab_columns t1 + left join (select t2.table_name, + t2.column_name, + t2.column_position, + t2.descend, + t3.index_name + from user_ind_columns t2 + left join user_indexes t3 + on t2.table_name = t3.table_name and t2.index_name = t3.index_name + and t3.status = 'valid' and t3.uniqueness = 'unique') t4 --unique:唯一索引 + on t1.table_name = t4.table_name and t1.column_name = t4.column_name + left join user_col_comments t5 on t1.table_name = t5.table_name and t1.column_name = t5.column_name + left join user_tab_comments t6 on t1.table_name = t6.table_name + where upper(t1.table_name)=upper('{tableName}') + order by t1.table_name, t1.column_id"; + + var columns = this.Context.Ado.SqlQuery(sql0); + return columns; + } + private List GetPrimaryKeyByTableNames(string tableName) { string cacheKey = "DbMaintenanceProvider.GetPrimaryKeyByTableNames." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();