You already about lazy population, which explains why it only fetches the primary key until you ask for more, so unless you have more questions about that your actual question here is why the ShipCity() method call fails to return anything. Can you show us the database table you're using? Are you positive it has data for ShipCity? Can you try printing the other columns to see if they work?
UPDATE:davidrw has it right: just an interpolation problem.