Currently INSERT identifiers are returned a part of Query or specifically QuerySingleOrDefaultAsync:
var productToInsert = new Product { Name = "product" };
var newProductKeys = connection.InsertReturnAsync(productToInsert);
Assert.AreNotEqual(productToInsert, newProductKeys);
Assert.IsTrue(productToInsert.Id == 0);
product.Id = newProductKeys.Id;
Assert.IsTrue(productToInsert.Id > 0);
Dapper should allow an additional flag which will trigger updating params object's properties:
var dapperParams = new Product();
var dapperFlags = CommandFlags.UpdateParams;
connection.QuerySingleOrDefaultAsync(sql, dapperParams, new CommandDefinition(..., dapperFlags, ...));
Assert.IsTrue(dapperParams.Id > 0);
This will prevent creating an empty object with only keys filled in:
var productToInsert = new Product { Name = "product" };
connection.InsertReturnKeysAsync(productToInsert);
Assert.IsTrue(productToInsert.Id > 0);