You should definitely use a ViewModel to separate context, as implied by the MVC pattern. In your scenario, I would probably do a full-featured ViewModel with the sum of all properties I plan to use in the various views, and populate only those I need for each specific view with their corresponding value from the DbContext's Entity items.
Here's a brief example:
public ActionResult Edit(int? id = null)
{
Room r = UnitOfWork.GetContext().Rooms
.Where(i => i.ID == id.Value).FirstOrDefault();
RoomViewModel rvm = new RoomViewModel();
rvm.ID = r.ID;
rvm.Name = rvm.Name;
if (needToBindChildren) rvm.ChildItems = r.ChildItems;
return View(rvm);
}
Other than having your code clean and MVC-compliant, an additional advantage over using a ViewModel is that you'll be able to use it as the main POST parameter for any request you'll eventually need to do (basically, every View featuring an html form):
[HttpPost]
public ActionResult Edit(RoomViewModel rvm)
{
string name = rvm.Name;
int id = rvm.ID;
UpdateRoomName(id, name);
}
You can either manually bind the properties or use a mapper of your choice (EmitMapper, Ninject, AutoMapper etc.), depending on your needs.
The LazyLoading feature isn't really relevant in your scenario, since you'll most likely want to Load() or Include() your properties when you need them and just avoid using them when you don't.
For a quick reference guide about enabling, disabling and effectively using the LazyLoading feature I suggest you the following references: