Was ist der Zweck von Dappers [ExplicitKey] Attribut? In diesem Beispiel ist generiertes SQL absolut identisch, unabhängig davon, ob der Schlüssel angewendet wird oder nicht.
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
Deshalb existiert das Attribut:
https://github.com/StackExchange/Dapper/issues/351
Das Attribut [Key] setzt einen automatisch inkrementierten Schlüssel voraus, und wenn Sie versuchen, einen benutzerdefinierten Schlüssel (z. B. Nicht-Int) zu übergeben, schlagen Insert und InsertAsync mit NullReferenceException fehl, auch wenn der übergebene Wert eindeutig nicht null ist. Also wurde [ExplicitKey] eingeführt, um diese stattdessen zu behandeln.