From 7ab2e9ce6d01dcf79717c02bf92ea7f1269af8ba Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Tue, 7 Dec 2021 18:44:17 +0800 Subject: [PATCH] MySql Support DateTimeOffset --- Src/Asp.Net/MySqlTest/UnitTest/UCodeFirst.cs | 11 +++++++++++ .../SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs | 2 ++ .../SqlSugar/Realization/MySql/MySqlProvider.cs | 5 +++++ Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 10 ++++++++++ 4 files changed, 28 insertions(+) diff --git a/Src/Asp.Net/MySqlTest/UnitTest/UCodeFirst.cs b/Src/Asp.Net/MySqlTest/UnitTest/UCodeFirst.cs index dca17cb84..f1a27776e 100644 --- a/Src/Asp.Net/MySqlTest/UnitTest/UCodeFirst.cs +++ b/Src/Asp.Net/MySqlTest/UnitTest/UCodeFirst.cs @@ -37,6 +37,17 @@ namespace OrmTest }).ToList(); Db.CodeFirst.InitTables(); Db.CodeFirst.InitTables(); + Db.CodeFirst.InitTables(); + + Db.Insertable(new UnitDateOfTime2() { DateTimeOffset1 = DateTimeOffset.Now }).ExecuteCommand(); + var list2 = Db.Queryable().ToList(); + + } + + public class UnitDateOfTime2 + { + [SqlSugar.SugarColumn(ColumnDataType ="datetime(3)")] + public DateTimeOffset DateTimeOffset1 { get; set; } } public class UnitTest3131 diff --git a/Src/Asp.Net/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs b/Src/Asp.Net/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs index 04ea3e886..1b5b88672 100644 --- a/Src/Asp.Net/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs +++ b/Src/Asp.Net/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs @@ -22,6 +22,8 @@ namespace SqlSugar csharpTypeName = "bool"; if (csharpTypeName == "SByte") csharpTypeName = "Byte"; + if (csharpTypeName == "DateTimeOffset") + csharpTypeName = "DateTime"; var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); return mappings.HasValue() ? mappings.First().Key : "varchar"; } diff --git a/Src/Asp.Net/SqlSugar/Realization/MySql/MySqlProvider.cs b/Src/Asp.Net/SqlSugar/Realization/MySql/MySqlProvider.cs index d270f1c0f..308622d85 100644 --- a/Src/Asp.Net/SqlSugar/Realization/MySql/MySqlProvider.cs +++ b/Src/Asp.Net/SqlSugar/Realization/MySql/MySqlProvider.cs @@ -117,6 +117,11 @@ namespace SqlSugar { sqlParameter.DbType = System.Data.DbType.AnsiString; } + if (parameter.DbType== System.Data.DbType.DateTimeOffset) + { + sqlParameter.Value = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)sqlParameter.Value); + sqlParameter.DbType = System.Data.DbType.DateTime; + } ++index; } return result; diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 13f672cf5..26967a1a2 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -17,6 +17,16 @@ namespace SqlSugar public class UtilMethods { + internal static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) + { + if (dateTime.Offset.Equals(TimeSpan.Zero)) + return dateTime.UtcDateTime; + else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))) + return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local); + else + return dateTime.DateTime; + } + internal static object To(object value, Type destinationType) { return To(value, destinationType, CultureInfo.InvariantCulture);