It's hard to tell what it wrong with the limited information that you posted.
I would recommend that you don't use ovm_do macro or mid_do.
Instead, use the function API directly. It makes debugging problems a lot easier.
In your body...
$cast(txn_handle, create_item(transaction_classname::type_id::get(), m_sequencer, "name"));
// Do what you need to do to set transaction fields, randomize, etc. here
See the OVM reference for more information on create_item, start_item, and finish_item.