mirror of
https://github.com/DapperLib/Dapper.git
synced 2026-10-16 21:03:18 +08:00
+2
-2
@@ -202,7 +202,7 @@ namespace Dapper
|
||||
static SqlMapper()
|
||||
{
|
||||
typeMap = new Dictionary<Type, TypeMapEntry>(41
|
||||
#if NET6_0_OR_GREATER
|
||||
#if NET6_0_OR_GREATER && DATEONLY
|
||||
+ 4 // {Date|Time}Only[?]
|
||||
#endif
|
||||
)
|
||||
@@ -248,7 +248,7 @@ namespace Dapper
|
||||
[typeof(SqlDecimal?)] = TypeMapEntry.DecimalFieldValue,
|
||||
[typeof(SqlMoney)] = TypeMapEntry.DecimalFieldValue,
|
||||
[typeof(SqlMoney?)] = TypeMapEntry.DecimalFieldValue,
|
||||
#if NET6_0_OR_GREATER
|
||||
#if NET6_0_OR_GREATER && DATEONLY
|
||||
[typeof(DateOnly)] = TypeMapEntry.DoNotSetFieldValue,
|
||||
[typeof(TimeOnly)] = TypeMapEntry.DoNotSetFieldValue,
|
||||
[typeof(DateOnly?)] = TypeMapEntry.DoNotSetFieldValue,
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Dapper.Tests;
|
||||
[Collection("DateTimeOnlyTests")]
|
||||
public sealed class SystemSqlClientDateTimeOnlyTests : DateTimeOnlyTests<SystemSqlClientProvider> { }
|
||||
*/
|
||||
#if MSSQLCLIENT
|
||||
#if MSSQLCLIENT && DATEONLY
|
||||
[Collection("DateTimeOnlyTests")]
|
||||
public sealed class MicrosoftSqlClientDateTimeOnlyTests : DateTimeOnlyTests<MicrosoftSqlClientProvider> { }
|
||||
#endif
|
||||
@@ -17,8 +17,11 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
|
||||
{
|
||||
public class HazDateTimeOnly
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public DateOnly Date { get; set; }
|
||||
public TimeOnly Time { get; set; }
|
||||
public DateOnly? NDate { get; set; }
|
||||
public TimeOnly? NTime { get; set; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -27,12 +30,18 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
|
||||
var now = DateTime.Now;
|
||||
var args = new HazDateTimeOnly
|
||||
{
|
||||
Name = nameof(TypedInOut),
|
||||
Date = DateOnly.FromDateTime(now),
|
||||
Time = TimeOnly.FromDateTime(now),
|
||||
NDate = DateOnly.FromDateTime(now),
|
||||
NTime = TimeOnly.FromDateTime(now),
|
||||
};
|
||||
var row = connection.QuerySingle<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
|
||||
var row = connection.QuerySingle<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
|
||||
Assert.Equal(args.Name, row.Name);
|
||||
Assert.Equal(args.Date, row.Date);
|
||||
Assert.Equal(args.Time, row.Time);
|
||||
Assert.Equal(args.NDate, row.NDate);
|
||||
Assert.Equal(args.NTime, row.NTime);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -41,12 +50,18 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
|
||||
var now = DateTime.Now;
|
||||
var args = new HazDateTimeOnly
|
||||
{
|
||||
Name = nameof(TypedInOutAsync),
|
||||
Date = DateOnly.FromDateTime(now),
|
||||
Time = TimeOnly.FromDateTime(now),
|
||||
NDate = DateOnly.FromDateTime(now),
|
||||
NTime = TimeOnly.FromDateTime(now),
|
||||
};
|
||||
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
|
||||
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
|
||||
Assert.Equal(args.Name, row.Name);
|
||||
Assert.Equal(args.Date, row.Date);
|
||||
Assert.Equal(args.Time, row.Time);
|
||||
Assert.Equal(args.NDate, row.NDate);
|
||||
Assert.Equal(args.NTime, row.NTime);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -54,11 +69,14 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
var args = new DynamicParameters();
|
||||
var name = nameof(UntypedInOut);
|
||||
var date = DateOnly.FromDateTime(now);
|
||||
var time = TimeOnly.FromDateTime(now);
|
||||
args.Add("name", name);
|
||||
args.Add("date", date);
|
||||
args.Add("time", time);
|
||||
var row = connection.QuerySingle<dynamic>("select @date as [Date], @time as [Time]", args);
|
||||
var row = connection.QuerySingle<dynamic>("select @name as [Name], @date as [Date], @time as [Time]", args);
|
||||
Assert.Equal(name, (string)row.Name);
|
||||
// untyped, observation is that these come back as DateTime and TimeSpan
|
||||
Assert.Equal(date, DateOnly.FromDateTime((DateTime)row.Date));
|
||||
Assert.Equal(time, TimeOnly.FromTimeSpan((TimeSpan)row.Time));
|
||||
|
||||
Reference in New Issue
Block a user