diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs index 6d4ad8840..a9f3cfddb 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs @@ -273,6 +273,7 @@ namespace SqlSugar return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; } + private int GetDbColumnIndex = 0; public virtual string GetDbColumn(DbColumnInfo columnInfo ,object name) { if (columnInfo.InsertServerTime) @@ -283,7 +284,15 @@ namespace SqlSugar { return columnInfo.InsertSql; } - else + else if (columnInfo.PropertyType.Name == "TimeOnly" && name!=null&&!name.ObjToString().StartsWith(Builder.SqlParameterKeyWord)) + { + var timeSpan = UtilMethods.TimeOnlyToTimeSpan(columnInfo.Value); + var pname =Builder.SqlParameterKeyWord+columnInfo.DbColumnName+ "_ts"+ GetDbColumnIndex; + this.Parameters.Add(new SugarParameter(pname, timeSpan)); + GetDbColumnIndex++; + return pname; + } + else { return name+""; } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs index 4fed19ab1..727270311 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs @@ -386,7 +386,7 @@ namespace SqlSugar var date = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)value); return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; } - + private int GetDbColumnIndex = 0; public virtual string GetDbColumn(DbColumnInfo columnInfo, object name) { if (columnInfo.UpdateServerTime) @@ -397,6 +397,14 @@ namespace SqlSugar { return columnInfo.UpdateSql; } + else if (columnInfo.PropertyType.Name == "TimeOnly" && name != null && !name.ObjToString().StartsWith(Builder.SqlParameterKeyWord)) + { + var timeSpan = UtilMethods.TimeOnlyToTimeSpan(columnInfo.Value); + var pname = Builder.SqlParameterKeyWord + columnInfo.DbColumnName + "_ts" + GetDbColumnIndex; + this.Parameters.Add(new SugarParameter(pname, timeSpan)); + GetDbColumnIndex++; + return pname; + } else { return name + ""; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs index 639384c88..4715346b4 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs @@ -162,6 +162,16 @@ namespace SqlSugar { this.DbType = System.Data.DbType.UInt16; } + else if (type.Name == "TimeOnly") + { + this.DbType = System.Data.DbType.Time; + this.Value = UtilMethods.TimeOnlyToTimeSpan(this.Value); + } + else if (type.Name == "DateOnly") + { + this.DbType = System.Data.DbType.Date; + this.Value = UtilMethods.DateOnlyToDateTime(this.Value); + } } public SugarParameter(string name, object value, bool isOutput) diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 39440fd2d..6063ff3d6 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -116,6 +116,19 @@ namespace SqlSugar if (destinationType.IsEnum && value is int) return Enum.ToObject(destinationType, (int)value); + if (destinationType.Name == "TimeOnly"&& sourceType.Name!= "TimeOnly") + { + var type = Type.GetType("System.TimeOnly", true, true); + var method=type.GetMethods().FirstOrDefault(it => it.GetParameters().Length == 1 && it.Name == "FromTimeSpan"); + return method.Invoke(null, new object[] { value }); + } + if (destinationType.Name == "DateOnly" && sourceType.Name != "DateOnly") + { + var type = Type.GetType("System.DateOnly", true, true); + var method = type.GetMethods().FirstOrDefault(it => it.GetParameters().Length == 1 && it.Name == "FromDateTime"); + return method.Invoke(null, new object[] { value }); + } + if (!destinationType.IsInstanceOfType(value)) return Convert.ChangeType(value, destinationType, culture); } @@ -1064,5 +1077,19 @@ namespace SqlSugar { return $"[value=sql{UtilConstants.ReplaceKey}]"; } + + internal static object TimeOnlyToTimeSpan(object value) + { + if (value == null) return null; + var method = value.GetType().GetMethods().First(it => it.GetParameters().Length == 0 && it.Name == "ToTimeSpan"); + return method.Invoke(value, new object[] { }); + } + + internal static object DateOnlyToDateTime(object value) + { + if (value == null) return null; + var method = value.GetType().GetMethods().First(it => it.GetParameters().Length == 0 && it.Name == "ToShortDateString"); + return method.Invoke(value, new object[] { }); + } } }