我有以下代码将数据插入 SQL Server 数据库。数据库表
DataEntries
列 IssueDate
的数据类型为 Date
。 IssueDate = DateOnly.MinValue
有问题。当我运行以下代码时。
DataEntry l_DataEntries = new()
{
CreatedAt = DateTime.Now,
IssueDate = DateOnly.MinValue
};
var DataEntriesQ = @"
INSERT [dbo].[DataEntries](
[CreatedAt],
[IssueDate]
) VALUES (
@CreatedAt,
@IssueDate
); SELECT CAST(SCOPE_IDENTITY() as int)";
int dataEntryId = dbContext.QueryAsync<int>(DataEntriesQ, l_DataEntries).Result.SingleOrDefault();
我收到以下异常
System.AggregateException:“发生一个或多个错误。 (该会员 System.DateOnly 类型的 IssueDate 不能用作 参数值)'
内部异常:NotSupportedException:成员 System.DateOnly 类型的 IssueDate 不能用作 参数值
这是 DataEntry 的模型。
public class DataEntry
{
...
public DateOnly? IssueDate { get; set; }
public DateTime? CreatedAt { get; set; }
}
在撰写本文时使用最新版本的 Dapper 时遇到了这个问题。尽管有些人制作了自定义处理程序,例如可以在此处找到:https://github.com/DapperLib/Dapper/issues/1715,但我发现对我来说最快/最简单的解决方案是将我的日期设置为我的 C# 模型中的 DateTime 类型,但 SQL Server 中的 表列类型只是日期类型。这会截断时间,因为它存储在数据库中,并且目前被证明是一个很好的解决方案(直到对 DateOnly 的支持变得更好)。