不存在从 DbType UInt64 到已知 SqlDbType 的映射。精巧的 C#

Moh*_*yan 3 c# sql-server dapper

TotalPrice在我们的 SQL Server 2016 数据库中有一个numeric(20, 3)数据类型的表字段()。

我使用ulongtype 作为我的 C# 属性类型。

public ulong TotalPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我想在我的表中插入一条记录时,发生了以下异常。

不存在从 DbType UInt64 到已知 SqlDbType 的映射

我的 C# 代码插入记录:

const string queryInsertInvoice = @"
INSERT INTO Invoice (CustomerId, Number, TotalPrice, LatestStatusDateTime) 
VALUES (@CustomerId, @Number, @TotalPrice, @LatestStatusDateTime)
SELECT SCOPE_IDENTITY();";

var invoiceId = await dbConnection.QueryFirstOrDefaultAsync<int>(queryInsertInvoice, invoice);
Run Code Online (Sandbox Code Playgroud)

我如何使用 Dapper 2.0.53 处理这种情况?

Mar*_*ell 7

这是故意的。SQL Server 没有无符号整数,因此它试图阻止您将数据存储为与您期望的不同的数据 - 环绕对等式运算很好,但如果我们允许,不等式运算对于某些值的行为会非常意外。

换句话说:使用long,而不是ulong


编辑:我可以在“Dapper 应该允许ulong前 63 位 - 强制它long-OverflowException如果设置 MSB并抛出和异常(?)”上出售。这只是今天没有实施。