This is by design. When an entity with a database-generated identity is inserted, an insert statement is accompanied by a SELECT
statement to read the generated identity value into the Id property of the inserted entity. The command has this shape:
INSERT [dbo].[Table](...)
VALUES (...)
SELECT [Id]
FROM [dbo].[Table]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
It triggers the ReaderExecuting/ReaderExecuted
pair.
If, on the other hand, an entity hasn't got a database-generated identity, the entity can just be inserted without a subsequent SELECT
statement. In this case the NonQueryExecuting/NonQueryExecuted
pair is triggered. (As I tested myself).