add net60 DateOnly mapping SqlServer

This commit is contained in:
2881099 2021-11-22 21:42:25 +08:00
parent 352ceceb23
commit b26a581f82
15 changed files with 50 additions and 26 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.1;net50</TargetFrameworks> <TargetFrameworks>netcoreapp3.1;net60</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IsPackable>true</IsPackable> <IsPackable>true</IsPackable>
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>
@ -19,8 +19,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Colorful.Console" Version="1.2.9" /> <PackageReference Include="Colorful.Console" Version="1.2.9" />
<PackageReference Include="RazorEngine.NetCore" Version="2.2.6" /> <PackageReference Include="RazorEngine.NetCore" Version="2.2.6" />
<PackageReference Include="System.CodeDom" Version="5.0.0" /> <PackageReference Include="System.CodeDom" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -217,7 +217,7 @@ namespace FreeSql
/// 比较实体,计算出值发生变化的属性,以及属性变化的前后值 /// 比较实体,计算出值发生变化的属性,以及属性变化的前后值
/// </summary> /// </summary>
/// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> /// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
/// <returns></returns> /// <returns>key: 属性名, value: [旧值, 新值]</returns>
public Dictionary<string, object[]> CompareState<TEntity>(TEntity newdata) where TEntity : class public Dictionary<string, object[]> CompareState<TEntity>(TEntity newdata) where TEntity : class
{ {
CheckEntityTypeOrThrow(typeof(TEntity)); CheckEntityTypeOrThrow(typeof(TEntity));

View File

@ -223,7 +223,7 @@ namespace FreeSql
/// 比较实体,计算出值发生变化的属性,以及属性变化的前后值 /// 比较实体,计算出值发生变化的属性,以及属性变化的前后值
/// </summary> /// </summary>
/// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> /// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
/// <returns></returns> /// <returns>key: 属性名, value: [旧值, 新值]</returns>
public Dictionary<string, object[]> CompareState(TEntity newdata) public Dictionary<string, object[]> CompareState(TEntity newdata)
{ {
if (newdata == null) return null; if (newdata == null) return null;

View File

@ -67,7 +67,7 @@
比较实体,计算出值发生变化的属性,以及属性变化的前后值 比较实体,计算出值发生变化的属性,以及属性变化的前后值
</summary> </summary>
<param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
<returns></returns> <returns>key: 属性名, value: [旧值, 新值]</returns>
</member> </member>
<member name="P:FreeSql.DbContext.EntityChangeReport.ChangeInfo.BeforeObject"> <member name="P:FreeSql.DbContext.EntityChangeReport.ChangeInfo.BeforeObject">
<summary> <summary>
@ -142,7 +142,7 @@
比较实体,计算出值发生变化的属性,以及属性变化的前后值 比较实体,计算出值发生变化的属性,以及属性变化的前后值
</summary> </summary>
<param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
<returns></returns> <returns>key: 属性名, value: [旧值, 新值]</returns>
</member> </member>
<member name="M:FreeSql.DbSet`1.FlushState"> <member name="M:FreeSql.DbSet`1.FlushState">
<summary> <summary>
@ -333,7 +333,7 @@
比较实体,计算出值发生变化的属性,以及属性变化的前后值 比较实体,计算出值发生变化的属性,以及属性变化的前后值
</summary> </summary>
<param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
<returns></returns> <returns>key: 属性名, value: [旧值, 新值]</returns>
</member> </member>
<member name="M:FreeSql.IBaseRepository`1.SaveMany(`0,System.String)"> <member name="M:FreeSql.IBaseRepository`1.SaveMany(`0,System.String)">
<summary> <summary>
@ -538,14 +538,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -62,7 +62,7 @@ namespace FreeSql
/// 比较实体,计算出值发生变化的属性,以及属性变化的前后值 /// 比较实体,计算出值发生变化的属性,以及属性变化的前后值
/// </summary> /// </summary>
/// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param> /// <param name="newdata">最新的实体对象,它将与附加实体的状态对比</param>
/// <returns></returns> /// <returns>key: 属性名, value: [旧值, 新值]</returns>
Dictionary<string, object[]> CompareState(TEntity newdata); Dictionary<string, object[]> CompareState(TEntity newdata);
int Update(TEntity entity); int Update(TEntity entity);

View File

@ -0,0 +1,8 @@
{
"profiles": {
"WSL": {
"commandName": "WSL2",
"distributionName": ""
}
}
}

View File

@ -17,7 +17,7 @@
<PackageReference Include="Dapper" Version="2.0.123" /> <PackageReference Include="Dapper" Version="2.0.123" />
<PackageReference Include="IdleBus" Version="1.5.2" /> <PackageReference Include="IdleBus" Version="1.5.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="3.0.1" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="4.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">

View File

@ -26,7 +26,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="8.5.3" /> <PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="8.5.4" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net452'"> <ItemGroup Condition="'$(TargetFramework)' == 'net452'">
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="7.10.1" /> <PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="7.10.1" />

View File

@ -30,8 +30,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Npgsql.LegacyPostgis" Version="5.0.10" /> <PackageReference Include="Npgsql.LegacyPostgis" Version="5.0.11" />
<PackageReference Include="Npgsql.NetTopologySuite" Version="5.0.10" /> <PackageReference Include="Npgsql.NetTopologySuite" Version="5.0.11" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net461'"> <ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<PackageReference Include="Npgsql.LegacyPostgis" Version="4.1.7" /> <PackageReference Include="Npgsql.LegacyPostgis" Version="4.1.7" />

View File

@ -34,7 +34,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Oscar.Data.SqlClient" Version="1.0.8.2" /> <PackageReference Include="Oscar.Data.SqlClient" Version="4.0.5" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'netstandard2.0'"> <ItemGroup Condition="'$(TargetFramework)' != 'netstandard2.0'">
<Reference Include="System.Data.OscarClient"> <Reference Include="System.Data.OscarClient">

View File

@ -29,7 +29,7 @@
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" /> <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net60' or '$(TargetFramework)' == 'net50'"> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net60' or '$(TargetFramework)' == 'net50'">
<PackageReference Include="Microsoft.Data.SqlClient" Version="3.0.1" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="4.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -42,5 +42,8 @@
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'"> <PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
<DefineConstants>net40</DefineConstants> <DefineConstants>net40</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net60'">
<DefineConstants>net60;microsoft</DefineConstants>
</PropertyGroup>
</Project> </Project>

View File

@ -72,6 +72,15 @@ namespace FreeSql.SqlServer
if (param.Equals(DateTimeOffset.MinValue) == true) param = new DateTimeOffset(new DateTime(1970, 1, 1), TimeSpan.Zero); if (param.Equals(DateTimeOffset.MinValue) == true) param = new DateTimeOffset(new DateTime(1970, 1, 1), TimeSpan.Zero);
return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'"); return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'");
} }
#if net60
else if (param is DateOnly || param is DateOnly?)
{
if (param.Equals(DateOnly.MinValue) == true) param = new DateOnly(1970, 1, 1);
return string.Concat("'", ((DateOnly)param).ToString("yyyy-MM-dd"), "'");
}
else if (param is TimeOnly || param is TimeOnly?)
return ((TimeOnly)param).ToTimeSpan().TotalSeconds;
#endif
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).TotalSeconds; return ((TimeSpan)param).TotalSeconds;
else if (param is byte[]) else if (param is byte[])

View File

@ -37,6 +37,9 @@ namespace FreeSql.SqlServer
{ typeof(TimeSpan).FullName, CsToDb.New(SqlDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(SqlDbType.Time, "time", "time",false, true, null) }, { typeof(TimeSpan).FullName, CsToDb.New(SqlDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(SqlDbType.Time, "time", "time",false, true, null) },
{ typeof(DateTime).FullName, CsToDb.New(SqlDbType.DateTime, "datetime", "datetime NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(SqlDbType.DateTime, "datetime", "datetime", false, true, null) }, { typeof(DateTime).FullName, CsToDb.New(SqlDbType.DateTime, "datetime", "datetime NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(SqlDbType.DateTime, "datetime", "datetime", false, true, null) },
{ typeof(DateTimeOffset).FullName, CsToDb.New(SqlDbType.DateTimeOffset, "datetimeoffset", "datetimeoffset NOT NULL", false, false, new DateTimeOffset(new DateTime(1970,1,1), TimeSpan.Zero)) },{ typeof(DateTimeOffset?).FullName, CsToDb.New(SqlDbType.DateTimeOffset, "datetimeoffset", "datetimeoffset", false, true, null) }, { typeof(DateTimeOffset).FullName, CsToDb.New(SqlDbType.DateTimeOffset, "datetimeoffset", "datetimeoffset NOT NULL", false, false, new DateTimeOffset(new DateTime(1970,1,1), TimeSpan.Zero)) },{ typeof(DateTimeOffset?).FullName, CsToDb.New(SqlDbType.DateTimeOffset, "datetimeoffset", "datetimeoffset", false, true, null) },
#if net60
{ typeof(DateOnly).FullName, CsToDb.New(SqlDbType.Date, "date", "date NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateOnly?).FullName, CsToDb.New(SqlDbType.Date, "date", "date", false, true, null) },
#endif
{ typeof(byte[]).FullName, CsToDb.New(SqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) }, { typeof(byte[]).FullName, CsToDb.New(SqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
{ typeof(string).FullName, CsToDb.New(SqlDbType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") }, { typeof(string).FullName, CsToDb.New(SqlDbType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") },

View File

@ -113,6 +113,13 @@ namespace FreeSql.SqlServer
var ts = (TimeSpan)value; var ts = (TimeSpan)value;
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}"; value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
} }
#if net60
if (type == typeof(TimeOnly) || type == typeof(TimeOnly?))
{
var ts = (TimeOnly)value;
value = $"{ts.Hour}:{ts.Minute}:{ts.Second}.{ts.Millisecond}";
}
#endif
return string.Format(CultureInfo.InvariantCulture, "{0}", (_orm.Ado as AdoProvider).AddslashesProcessParam(value, type, col)); return string.Format(CultureInfo.InvariantCulture, "{0}", (_orm.Ado as AdoProvider).AddslashesProcessParam(value, type, col));
} }
} }

View File

@ -40,5 +40,8 @@
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'"> <PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
<DefineConstants>net40</DefineConstants> <DefineConstants>net40</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net60'">
<DefineConstants>net60</DefineConstants>
</PropertyGroup>
</Project> </Project>