diff --git a/Src/Asp.Net/SqlServerTest/Models/Student.cs b/Src/Asp.Net/SqlServerTest/Models/Student.cs index fe6c6362a..5983de1c1 100644 --- a/Src/Asp.Net/SqlServerTest/Models/Student.cs +++ b/Src/Asp.Net/SqlServerTest/Models/Student.cs @@ -15,7 +15,7 @@ namespace OrmTest.Models public int Id { get; set; } public int? SchoolId { get; set; } public string Name { get; set; } - public DateTime? CreateTime { get; set; } + public DateTimeOffset? CreateTime { get; set; } [SugarColumn(IsIgnore=true)] public int TestId { get; set; } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 37062b148..18c6a4ea0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -38,6 +38,8 @@ namespace SqlSugar private static readonly MethodInfo getInt32 = typeof(IDataRecord).GetMethod("GetInt32", new Type[] { typeof(int) }); private static readonly MethodInfo getInt64 = typeof(IDataRecord).GetMethod("GetInt64", new Type[] { typeof(int) }); private static readonly MethodInfo getString = typeof(IDataRecord).GetMethod("GetString", new Type[] { typeof(int) }); + private static readonly MethodInfo getdatetimeoffset = typeof(IDataRecordExtensions).GetMethod("Getdatetimeoffset"); + private static readonly MethodInfo getdatetimeoffsetDate = typeof(IDataRecordExtensions).GetMethod("GetdatetimeoffsetDate"); private static readonly MethodInfo getStringGuid = typeof(IDataRecordExtensions).GetMethod("GetStringGuid"); private static readonly MethodInfo getConvertStringGuid = typeof(IDataRecordExtensions).GetMethod("GetConvertStringGuid"); private static readonly MethodInfo getEnum = typeof(IDataRecordExtensions).GetMethod("GetEnum"); @@ -54,11 +56,14 @@ namespace SqlSugar private static readonly MethodInfo getConvertInt32 = typeof(IDataRecordExtensions).GetMethod("GetConvertInt32"); private static readonly MethodInfo getConvertInt64 = typeof(IDataRecordExtensions).GetMethod("GetConvetInt64"); private static readonly MethodInfo getConvertEnum_Null = typeof(IDataRecordExtensions).GetMethod("GetConvertEnum_Null"); + private static readonly MethodInfo getConvertdatetimeoffset = typeof(IDataRecordExtensions).GetMethod("GetConvertdatetimeoffset"); + private static readonly MethodInfo getConvertdatetimeoffsetDate = typeof(IDataRecordExtensions).GetMethod("GetConvertdatetimeoffsetDate"); private static readonly MethodInfo getOtherNull = typeof(IDataRecordExtensions).GetMethod("GetOtherNull"); private static readonly MethodInfo getOther = typeof(IDataRecordExtensions).GetMethod("GetOther"); private static readonly MethodInfo getSqliteTypeNull = typeof(IDataRecordExtensions).GetMethod("GetSqliteTypeNull"); private static readonly MethodInfo getSqliteType = typeof(IDataRecordExtensions).GetMethod("GetSqliteType"); private static readonly MethodInfo getEntity = typeof(IDataRecordExtensions).GetMethod("GetEntity", new Type[] { typeof(SqlSugarClient) }); + private delegate T Load(IDataRecord dataRecord); private Load handler; #endregion @@ -278,6 +283,11 @@ namespace SqlSugar if (bindProperyTypeName == "int64" || bindProperyTypeName == "long") method = isNullableType ? getConvertInt64 : getInt64; break; + case CSharpDataType.DateTimeOffset: + method = isNullableType ? getConvertdatetimeoffset : getdatetimeoffset; + if (bindProperyTypeName == "datetime") + method = isNullableType ? getConvertdatetimeoffsetDate : getdatetimeoffsetDate; + break; default: method = getValueMethod; break; diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs index ac2fd54dd..0722f95db 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs @@ -132,6 +132,49 @@ namespace SqlSugar return reval; } + public static DateTime GetdatetimeoffsetDate(this IDataRecord dr, int i) + { + if (dr.IsDBNull(i)) + { + return DateTime.MinValue; + } + var offsetValue = (DateTimeOffset)dr.GetValue(i); + var reval = offsetValue.DateTime; + return reval; + } + + public static DateTime? GetConvertdatetimeoffsetDate(this IDataRecord dr, int i) + { + if (dr.IsDBNull(i)) + { + return DateTime.MinValue; + } + var offsetValue = (DateTimeOffset)dr.GetValue(i); + var reval = offsetValue.DateTime; + return reval; + } + + public static DateTimeOffset Getdatetimeoffset(this IDataRecord dr, int i) + { + if (dr.IsDBNull(i)) + { + return default(DateTimeOffset); + } + var reval = (DateTimeOffset)dr.GetValue(i); + return reval; + } + + public static DateTimeOffset? GetConvertdatetimeoffset(this IDataRecord dr, int i) + { + if (dr.IsDBNull(i)) + { + return default(DateTimeOffset); + } + var reval = (DateTimeOffset)dr.GetValue(i); + return reval; + } + + public static string GetConvertString(this IDataRecord dr, int i) { if (dr.IsDBNull(i)) diff --git a/Src/Asp.Net/SqlSugar/Enum/ProperyType.cs b/Src/Asp.Net/SqlSugar/Enum/ProperyType.cs index 452522116..05f50674e 100644 --- a/Src/Asp.Net/SqlSugar/Enum/ProperyType.cs +++ b/Src/Asp.Net/SqlSugar/Enum/ProperyType.cs @@ -22,6 +22,7 @@ namespace SqlSugar @other, @byteArray, @float, - @time + @time, + @DateTimeOffset } } diff --git a/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs index 77db336d2..5c9d8e481 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs @@ -41,7 +41,9 @@ namespace SqlSugar new KeyValuePair("uniqueidentifier",CSharpDataType.Guid), new KeyValuePair("binary",CSharpDataType.byteArray), new KeyValuePair("image",CSharpDataType.byteArray), - new KeyValuePair("varbinary",CSharpDataType.byteArray)}; + new KeyValuePair("varbinary",CSharpDataType.byteArray), + new KeyValuePair("datetimeoffset", CSharpDataType.DateTimeOffset), + new KeyValuePair("datetimeoffset", CSharpDataType.DateTime)}; } } }