Skip to content

Commit 921490a

Browse files
committed
Override Bind/Read in SqlServer's TypeMapper only
1 parent 272c622 commit 921490a

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/TypeMapper.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,26 @@ public override void BindString(DbParameter parameter, object value)
8080
: NVarCharMaxLength;
8181
}
8282

83+
#if NET6_0_OR_GREATER
84+
public override void BindDateOnly(DbParameter parameter, object value)
85+
{
86+
parameter.DbType = DbType.Date;
87+
parameter.Value = value != null ? (DateOnly) value : DBNull.Value;
88+
}
89+
90+
public override void BindTimeOnly(DbParameter parameter, object value)
91+
{
92+
parameter.DbType = DbType.Time;
93+
parameter.Value = value != null ? (TimeOnly) value : DBNull.Value;
94+
}
95+
96+
public override object ReadDateOnly(DbDataReader reader, int index) =>
97+
reader.GetFieldValue<DateOnly>(index);
98+
99+
public override object ReadTimeOnly(DbDataReader reader, int index) =>
100+
reader.GetFieldValue<TimeOnly>(index);
101+
#endif
102+
83103
public override SqlValueType MapSByte(int? length, int? precision, int? scale)
84104
{
85105
return new SqlValueType(SqlType.Int16);

Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,13 @@ public virtual void BindDateTime(DbParameter parameter, object value)
136136
public virtual void BindDateOnly(DbParameter parameter, object value)
137137
{
138138
parameter.DbType = DbType.Date;
139-
parameter.Value = value != null ? (DateOnly) value : DBNull.Value;
139+
parameter.Value = value != null ? ((DateOnly) value).ToDateTime(TimeOnly.MinValue) : DBNull.Value;
140140
}
141141

142142
public virtual void BindTimeOnly(DbParameter parameter, object value)
143143
{
144144
parameter.DbType = DbType.Time;
145-
parameter.Value = value != null ? (TimeOnly) value : DBNull.Value;
145+
parameter.Value = value != null ? ((TimeOnly) value).ToTimeSpan() : DBNull.Value;
146146
}
147147
#endif
148148

@@ -226,10 +226,10 @@ public virtual object ReadDateTime(DbDataReader reader, int index) =>
226226
#if NET6_0_OR_GREATER
227227

228228
public virtual object ReadDateOnly(DbDataReader reader, int index) =>
229-
reader.GetFieldValue<DateOnly>(index);
229+
DateOnly.FromDateTime(reader.GetFieldValue<DateTime>(index));
230230

231231
public virtual object ReadTimeOnly(DbDataReader reader, int index) =>
232-
reader.GetFieldValue<TimeOnly>(index);
232+
TimeOnly.FromTimeSpan(reader.GetFieldValue<TimeSpan>(index));
233233
#endif
234234

235235
public virtual object ReadDateTimeOffset(DbDataReader reader, int index) =>

0 commit comments

Comments
 (0)