The most likely answer is due to the IsolationLevel property.
The default value is; Serializable - Volatile data can be read but not modified &
no new data can be added during the transaction
Use your debugger & check the trans.IsolationLevel value, especially if you have done a read without committing the transaction & then attempting to update.
Link to MSDN System.Transactions.IsolationLevel documentation below;
IsolationLevel Enumeration (System.Transactions)[
^]
Kind Regards