So shouldn't each operation be checked and in case that the return value is false, for entities, or the number of entities affected is different than the number expected, for collections, to throw an exception to rollback the transaction?
I don't agree with you, as this is a matter of prespective.
A Transaction only looks for atomic executions without any exceptions.
But if you have a query which executes well on the database and for which the database doesn't throw any exception, then the transaction will accept it too as a working query.
If your business requires such a query to rollback the transaction if no rows were affected in the database, then you should manually check for the return result and raise the exception or just rollback the transaction.
This can't be built inside the framework as it's very business related.
The general rule is: No database exception, no problem for the transaction.