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"));
start_item(txn_handle);
// Do what you need to do to set transaction fields, randomize, etc. here
finish_item(txn_handle);
See the OVM reference for more information on create_item, start_item, and finish_item.
-Kurt