Dapper 的 [ExplicitKey] 属性 - 目的是什么?

Ser*_*gey 9 dapper

Dapper 的[ExplicitKey]属性的用途是什么?在这个例子中生成的 SQL 是完全相同的,不管是否应用了键。

exec sp_executesql 
N'insert into InvoiceDetail ([InvoiceID], [Detail]) values (@InvoiceID, @Detail);
select SCOPE_IDENTITY() id',N'@Detail nvarchar(4000),@InvoiceID int',@Detail=N'Insert_Single_1',@InvoiceID=4
Run Code Online (Sandbox Code Playgroud)

Dar*_*yda 11

这就是属性存在的原因:

https://github.com/StackExchange/Dapper/issues/351

[Key] 属性假定一个自动递增的键,并且当您尝试传递自定义(例如非 int)键时,即使传递的值显然不是 null,Insert 和 InsertAsync 也会失败并显示 NullReferenceException。所以 [ExplicitKey] 被引入来处理这些。