It seems like I found the solution (or at least it seems to):
by using virtual, you can tell to Entity Framework to enable lazy loading of specified property.
The problem was that I misunderstood the eager load policies of a non Virtual collection (or single entity): I thought that it would be "eager loaded" automatically, while eager load must be done explicitly using
include:
parent loadedParent = db.parent.include("children").FirstOrDefault(m=>m.parentid == id);
ViewBag.childrenCount = parent.children.Count;
return(loadedParent);
Note that lazy loading may be manually turned off, and I have also read that in some cases EF will turn out it automatically (IF I'm not wrong, for examplte during model validation).