private void _connection_Disposed(object sender, EventArgs e)
{
// TODO: what happens if this is called from another thread?
// connections should not be shared across threads while in a transaction
_connection.Disposed -= new EventHandler(_connection_Disposed);
_connection = null;
}