I understand your point of view but mine is a bit... different.
I like the lazy loading feature because it's great if you need to fetch an entity from the database but don't know in advance which properties you will need (and so, which prefetch paths you should add).
Having to write things like :
DataAccessAdapter adapter = new DataAccessAdapter(true);
OrderEntity order = new OrderEntity(10254);
adapter.FetchEntity(order);
order.Customer = (CustomerEntity)adapter.FetchNewEntity(new CustomerEntityFactory(),
order.GetRelationInfoCustomer());
adapter.CloseConnection();
makes me wonder if my code is still object oriented. Talking about this line :
order.Customer = (CustomerEntity)adapter.FetchNewEntity(new CustomerEntityFactory(),
order.GetRelationInfoCustomer());
I'm really worried about having to write such code at 500-1000 places in my application code.
Worst is that I haven't found a way to know if a related collection is empty or just hasn't been fetched yet.