Skip to content

Commit 1c07aa1

Browse files
authored
Merge pull request #14 from cq-panda/master
sync
2 parents 1adbf7b + 410cd54 commit 1c07aa1

File tree

60 files changed

+824
-355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+824
-355
lines changed

.Net6版本/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ private string GetOracleModelInfo(string tableName)
235235
c.TABLE_NAME TableName ,
236236
cc.COLUMN_NAME COLUMNNAME,
237237
cc.COMMENTS as ColumnCNName,
238-
CASE WHEN c.DATA_TYPE IN('smallint', 'INT') THEN 'int'
238+
CASE WHEN c.DATA_TYPE IN('smallint', 'INT') or (c.DATA_TYPE='NUMBER' and c.DATA_LENGTH=0) THEN 'int'
239239
WHEN c.DATA_TYPE IN('NUMBER') THEN 'decimal'
240240
WHEN c.DATA_TYPE IN('CHAR', 'VARCHAR', 'NVARCHAR','VARCHAR2', 'NVARCHAR2','text', 'image')
241241
THEN 'nvarchar'
@@ -1088,7 +1088,7 @@ private string GetOracleStructure(string tableName)
10881088
c.TABLE_NAME TableName ,
10891089
cc.COLUMN_NAME COLUMNNAME,
10901090
cc.COMMENTS as ColumnCNName,
1091-
CASE WHEN c.DATA_TYPE IN('smallint', 'INT') THEN 'int'
1091+
CASE WHEN c.DATA_TYPE IN('smallint', 'INT') or (c.DATA_TYPE='NUMBER' and c.DATA_LENGTH=0) THEN 'int'
10921092
WHEN c.DATA_TYPE IN('NUMBER') THEN 'decimal'
10931093
WHEN c.DATA_TYPE IN('CHAR', 'VARCHAR', 'NVARCHAR','VARCHAR2', 'NVARCHAR2','text', 'image')
10941094
THEN 'string'
@@ -1779,9 +1779,11 @@ private string CreateEntityModel(List<Sys_TableColumn> sysColumn, Sys_TableInfo
17791779
AttributeBuilder.Append("\r\n");
17801780
}
17811781

1782-
if ((column.IsKey == 1 && (column.ColumnType == "uniqueidentifier")) ||
1782+
if (
1783+
(DBType.Name.ToLower() == DbCurrentType.Oracle.ToString().ToLower() && (column.Maxlength == 36))
1784+
|| ((column.IsKey == 1 && (column.ColumnType == "uniqueidentifier")) ||
17831785
tableColumnInfo.ColumnType.ToLower() == "guid"
1784-
|| ((IsMysql() || IsDM()) && column.ColumnType == "string" && column.Maxlength == 36))
1786+
|| ((IsMysql() || IsDM()) && column.ColumnType == "string" && column.Maxlength == 36)))
17851787
{
17861788
tableColumnInfo.ColumnType = "uniqueidentifier";
17871789
}
@@ -1836,7 +1838,7 @@ private string CreateEntityModel(List<Sys_TableColumn> sysColumn, Sys_TableInfo
18361838
AttributeBuilder.Append("\r\n");
18371839
}
18381840
string columnType = (column.ColumnType == "Date" ? "DateTime" : column.ColumnType).Trim();
1839-
if (tableColumnInfo?.ColumnType?.ToLower() == "guid")
1841+
if (new string[] { "guid", "uniqueidentifier" }.Contains(tableColumnInfo?.ColumnType?.ToLower()))
18401842
{
18411843
columnType = "Guid";
18421844
}
@@ -1848,7 +1850,7 @@ private string CreateEntityModel(List<Sys_TableColumn> sysColumn, Sys_TableInfo
18481850
if ((column.IsKey == 1
18491851
&& (column.ColumnType == "uniqueidentifier"))
18501852
|| column.ColumnType == "guid"
1851-
|| ((IsMysql() || IsDM()) && column.ColumnType == "string" && column.Maxlength == 36))
1853+
|| ((IsMysql() || IsDM()|| IsOracle()) && column.ColumnType == "string" && column.Maxlength == 36))
18521854
{
18531855
columnType = "Guid" + (column.IsNull == 1 ? "?" : "");
18541856
}
@@ -1907,14 +1909,14 @@ private string CreateEntityModel(List<Sys_TableColumn> sysColumn, Sys_TableInfo
19071909

19081910
if (createType == 1)
19091911
{
1910-
if (sysColumn.Any(x => x.ApiInPut > 0))
1911-
{
1912-
entityAttribute.Add("ApiInput = typeof(Api" + tableInfo.TableName + "Input)");
1913-
}
1914-
if (sysColumn.Any(x => x.ApiOutPut > 0))
1915-
{
1916-
entityAttribute.Add("ApiOutput = typeof(Api" + tableInfo.TableName + "Output)");
1917-
}
1912+
//if (sysColumn.Any(x => x.ApiInPut > 0))
1913+
//{
1914+
// entityAttribute.Add("ApiInput = typeof(Api" + tableInfo.TableName + "Input)");
1915+
//}
1916+
//if (sysColumn.Any(x => x.ApiOutPut > 0))
1917+
//{
1918+
// entityAttribute.Add("ApiOutput = typeof(Api" + tableInfo.TableName + "Output)");
1919+
//}
19181920
}
19191921
string modelNameSpace = StratName + ".Entity";
19201922
string tableAttr = string.Join(",", entityAttribute);
@@ -2069,7 +2071,10 @@ private void GetPanelData(List<Sys_TableColumn> list, List<List<PanelHtml>> pane
20692071
}
20702072
}
20712073

2072-
2074+
private static bool IsOracle()
2075+
{
2076+
return DBType.Name.ToLower() == DbCurrentType.Oracle.ToString().ToLower();
2077+
}
20732078
private static bool IsMysql()
20742079
{
20752080
return DBType.Name.ToLower() == DbCurrentType.MySql.ToString().ToLower();

.Net6版本/VOL.Core/Controllers/Basic/VolController.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,25 @@ public class LongCovert : JsonConverter
3434
{
3535
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
3636
{
37-
return existingValue;
37+
if (reader.Value == null)
38+
{
39+
return null;
40+
}
41+
long.TryParse(reader.Value.ToString(), out long value);
42+
return value;
3843
}
3944

4045
public override bool CanConvert(Type objectType)
4146
{
42-
return typeof(long).Equals(objectType);
47+
return typeof(long) == objectType || typeof(long?) == objectType;
4348
}
4449
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
4550
{
51+
if (value == null)
52+
{
53+
writer.WriteNull();
54+
return;
55+
}
4656
serializer.Serialize(writer, value.ToString());
4757
}
4858
}

.Net6版本/VOL.Core/Dapper/DapperParseGuidTypeHandler.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@
33
using System.Collections.Generic;
44
using System.Data;
55
using System.Text;
6+
using VOL.Core.Const;
7+
using VOL.Core.Enums;
68

79
namespace VOL.Core.Dapper
810
{
9-
public class DapperParseGuidTypeHandler : SqlMapper.TypeHandler<Guid?>
11+
public class DapperParseGuidTypeHandler
1012
{
11-
public override void SetValue(IDbDataParameter parameter, Guid? guid)
13+
public static void InitParseGuid()
1214
{
13-
parameter.Value = guid.ToString();
14-
}
15-
16-
public override Guid? Parse(object value)
17-
{
18-
if (value == null || value.ToString() == "")
15+
if (DBType.Name == DbCurrentType.MySql.ToString())
1916
{
20-
return null;
17+
SqlMapper.AddTypeHandler(new DapperParseGuidTypeHandlerMySql());
18+
SqlMapper.RemoveTypeMap(typeof(Guid?));
2119
}
22-
if (value.GetType() == typeof(string))
20+
else if (DBType.Name == DbCurrentType.Oracle.ToString())
2321
{
24-
return new Guid((string)value);
22+
SqlMapper.AddTypeHandler(new DapperParseGuidTypeHandlerOracle());
23+
SqlMapper.RemoveTypeMap(typeof(Guid));
24+
SqlMapper.AddTypeHandler(new DapperParseGuidNullTypeHandlerOracle());
25+
SqlMapper.RemoveTypeMap(typeof(Guid?));
2526
}
26-
return (Guid)value;
2727
}
2828
}
2929
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Dapper;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Data;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace VOL.Core.Dapper
10+
{
11+
public class DapperParseGuidTypeHandlerMySql : SqlMapper.TypeHandler<Guid?>
12+
{
13+
public override void SetValue(IDbDataParameter parameter, Guid? guid)
14+
{
15+
parameter.Value = guid.ToString();
16+
}
17+
18+
public override Guid? Parse(object value)
19+
{
20+
if (value == null || value.ToString() == "")
21+
{
22+
return null;
23+
}
24+
if (value.GetType() == typeof(string))
25+
{
26+
return new Guid((string)value);
27+
}
28+
return (Guid)value;
29+
}
30+
31+
}
32+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
using Dapper;
2+
using System;
3+
using System.Collections.Concurrent;
4+
using System.Collections.Generic;
5+
using System.Data;
6+
using System.Linq;
7+
using System.Linq.Expressions;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
11+
namespace VOL.Core.Dapper
12+
{
13+
public class DapperParseGuidTypeHandlerOracle : TypeHandlerBase<Guid>
14+
{
15+
public override void SetValue(IDbDataParameter parameter, Guid value)
16+
{
17+
//SetOracleDbTypeOnParameter(parameter, "Raw", 16);
18+
parameter.Value = value.ToString();
19+
}
20+
21+
public override Guid Parse(object value)
22+
{
23+
return Guid.Parse(value.ToString());
24+
}
25+
}
26+
27+
public class DapperParseGuidNullTypeHandlerOracle : TypeHandlerBase<Guid?>
28+
{
29+
public override void SetValue(IDbDataParameter parameter, Guid? value)
30+
{
31+
if (value != null)
32+
{
33+
parameter.Value = value.ToString();
34+
}
35+
}
36+
37+
public override Guid? Parse(object value)
38+
{
39+
if (value == null || value.ToString() == "")
40+
{
41+
return null;
42+
}
43+
if (value.GetType() == typeof(string))
44+
{
45+
return new Guid((string)value);
46+
}
47+
return (Guid)value;
48+
}
49+
}
50+
51+
public abstract class TypeHandlerBase<T> : SqlMapper.TypeHandler<T>
52+
{
53+
private class DictionaryKey
54+
{
55+
public Type ParameterType { get; set; }
56+
public string OracleTypeName { get; set; }
57+
}
58+
59+
private class DictionaryKeyComparer : IEqualityComparer<DictionaryKey>
60+
{
61+
public bool Equals(DictionaryKey x, DictionaryKey y)
62+
{
63+
if (x == null && y != null) return false;
64+
if (x != null && y != null) return false;
65+
66+
return x.ParameterType == y.ParameterType && x.OracleTypeName.Equals(y.OracleTypeName);
67+
}
68+
69+
public int GetHashCode(DictionaryKey obj)
70+
{
71+
return 17 + obj.ParameterType.GetHashCode() * 23 + obj.OracleTypeName.GetHashCode() * 31;
72+
}
73+
}
74+
75+
private static readonly ConcurrentDictionary<DictionaryKey, Action<IDbDataParameter>> OracleDbTypeProperty =
76+
new ConcurrentDictionary<DictionaryKey, Action<IDbDataParameter>>(new DictionaryKeyComparer());
77+
78+
protected void SetOracleDbTypeOnParameter(IDbDataParameter parameter, string oracleTypeName, int? length = null)
79+
{
80+
var setter = OracleDbTypeProperty.GetOrAdd(new DictionaryKey { ParameterType = parameter.GetType(), OracleTypeName = oracleTypeName }, CreateSetTypeAction);
81+
setter(parameter);
82+
if (length.HasValue)
83+
{
84+
parameter.Size = length.Value;
85+
}
86+
}
87+
88+
89+
private static Action<IDbDataParameter> CreateSetTypeAction(DictionaryKey key)
90+
{
91+
Type enumType = key.ParameterType.Assembly.GetType($"{key.ParameterType.Namespace}.OracleDbType");
92+
var enumValue = Enum.Parse(enumType, key.OracleTypeName);
93+
var inputVariable = Expression.Parameter(typeof(IDbDataParameter));
94+
var convertExpression = Expression.Convert(inputVariable, key.ParameterType);
95+
96+
var expression = Expression.Assign(
97+
Expression.PropertyOrField(convertExpression, "OracleDbType"),
98+
Expression.Constant(enumValue));
99+
100+
return Expression.Lambda<Action<IDbDataParameter>>(expression, inputVariable).Compile();
101+
}
102+
}
103+
104+
}

.Net6版本/VOL.Core/EFDbContext/VOLContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
134134
foreach (var entity in modelBuilder.Model.GetEntityTypes())
135135
{
136136
string tableName = entity.GetTableName().ToUpper();
137-
if (tableName.StartsWith("SYS_") || tableName.StartsWith("DEMO_"))
137+
// if (tableName.StartsWith("SYS_") || tableName.StartsWith("DEMO_"))
138138
{
139139
entity.SetTableName(entity.GetTableName().ToUpper());
140140
foreach (var property in entity.GetProperties())

.Net6版本/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,7 @@ public static IServiceCollection AddModule(this IServiceCollection services, Con
6666
builder.RegisterType<ObjectModelValidatorState>().InstancePerLifetimeScope();
6767
string connectionString = DBServerProvider.GetConnectionString(null);
6868

69-
if (DBType.Name == DbCurrentType.MySql.ToString())
70-
{
71-
//2020.03.31增加dapper对mysql字段Guid映射
72-
SqlMapper.AddTypeHandler(new DapperParseGuidTypeHandler());
73-
SqlMapper.RemoveTypeMap(typeof(Guid?));
74-
75-
//services.AddDbContext<VOLContext>();
76-
//mysql8.x的版本使用Pomelo.EntityFrameworkCore.MySql 3.1会产生异常,需要在字符串连接上添加allowPublicKeyRetrieval=true
77-
services.AddDbContextPool<VOLContext>(optionsBuilder => { optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 11))); }, 64);
78-
}
79-
else if (DBType.Name == DbCurrentType.PgSql.ToString())
80-
{
81-
services.AddDbContextPool<VOLContext>(optionsBuilder => { optionsBuilder.UseNpgsql(connectionString); }, 64);
82-
}
83-
else
84-
{
85-
services.AddDbContextPool<VOLContext>(optionsBuilder => { optionsBuilder.UseSqlServer(connectionString); }, 64);
86-
}
69+
DapperParseGuidTypeHandler.InitParseGuid();
8770
//启用缓存
8871
if (AppSetting.UseRedis)
8972
{

.Net6版本/VOL.Core/Extensions/ConvertJsonExtension.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.Data;
66
using System.Reflection;
77
using System.Text;
8+
using VOL.Core.Controllers.Basic;
9+
810
namespace VOL.Core.Extensions
911
{
1012
public static class ConvertJsonExtension
@@ -342,19 +344,21 @@ public static T DeserializeObject<T>(this string entityString)
342344
{
343345
entityString = "[]";
344346
}
345-
return JsonConvert.DeserializeObject<T>(entityString);
347+
var settings = new JsonSerializerSettings();
348+
settings.Converters.Add(new LongCovert());
349+
return JsonConvert.DeserializeObject<T>(entityString, settings);
346350
}
347351

348352
public static string Serialize(this object obj, JsonSerializerSettings formatDate = null)
349353
{
350-
if (obj == null) return null;
354+
if (obj == null) return null;
351355
formatDate = formatDate ?? new JsonSerializerSettings
352356
{
353357
DateFormatString = "yyyy-MM-dd HH:mm:ss"
354358
};
359+
formatDate.Converters.Add(new LongCovert());
355360
return JsonConvert.SerializeObject(obj, formatDate);
356361
}
357-
358362
}
359363
}
360364

.Net6版本/VOL.Core/Extensions/EntityProperties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1396,7 +1396,7 @@ private static TSource SetDefaultVal<TSource>(this TSource source, TableDefaultC
13961396
{
13971397
string filed = property.Name.ToLower();
13981398
if (filed == defaultColumns.UserIdField?.ToLower())
1399-
property.SetValue(source, userInfo.User_Id);
1399+
property.SetValue(source, userInfo.User_Id.ChangeType(property.PropertyType));
14001400

14011401
if (filed == defaultColumns.UserNameField?.ToLower())
14021402
property.SetValue(source, userInfo.UserTrueName);

.Net6版本/VOL.Core/VOL.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<PackageReference Include="Microsoft.Extensions.Caching.Redis.Core" Version="1.0.3" />
5353
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="6.0.0" />
5454
<PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.4" />
55-
<PackageReference Include="Npgsql" Version="6.0.0" />
55+
<PackageReference Include="Npgsql" Version="6.0.11" />
5656
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.0" />
5757
<!--<PackageReference Include="MySql.Data" Version="8.0.13" />-->
5858
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.0" />

0 commit comments

Comments
 (0)