If a row is read from the database (or from the cache) and the DO is created in memory using method with a transaction parameter, the DO is cached in the transaction's DO cache, if exists.
If a row is read from the database (or from the cache) and the DO is created in memory using method without a transaction parameter, the DO is not cached in the transaction DO cache. This way, DODS can not guarantee that if the same row is read again, the same DO will be returned from the transaction cache (it would always be a different DO instance in memory) and data could be inconsistent (because already changed in the database).
In new DODS are added new methods for memory creation of DOs for an existing database row (createExisting), for creating new DOs (createVirgin) and DO constructors that support transaction parameter. The DOML attribute DirtyDOs defines whether the old ("dirty") methods (methods without transaction parameter) will be generated or not. If this parameter is set to "Compatible", "dirty" methods will be generated (as before), if set to "Deprecate", "dirty" methods will be generated as deprecated, and if set to "Omit", "dirty" methods will not be generated at all.
Only for methods that support multi databases are not added new methods with transaction parameter because the transaction contains the information about the database, so the methods with the transaction parameter work only with transaction's database.