А тут вложенность и не нужна.
Вот у вас есть сущность Компания (Company) в вашей компании разве есть страны? Нет, у нее есть офисы (Office)
А у офисов уже есть адрес (Address) какой то конкретный и на все остальные ему как бы пофиг поэтому вложенность тут не нужна, она понадобится при заполнении например чтобы показать dropbox пользователю, для этого сделайте AddressDataBase какой-нибудь со вложенностью адресов. И у обычно если много офисов, то у них указывают контактные данные
то есть
class Company
{
public List<Office> Offices {get; set;}
public string Description {get; set;} //Тут описание вашей компании: год основания там и все такое.
public Contacts GlobalContacts {get;set;} //Глобальные контакты для всей компании
}
class Office
{
public Address Address {get; set;}
public List<Employee> Employees {get; set;}
public List<Tour> Tours {get;set;}
public Contacts Contacts {get;set;}
}
class Address
{
public string Country {get;set;}
public string City {get;set;}
public string Street {get;set;}
public string HouseNumber {get; set;}
}
class Tour
{
public string Country {get; set;}
public string City {get; set;}
public Hotel Hotel {get; set;}
}
class Hotel
{
public string Description {get;set;}
public Address Address {get; set;}
public List<Image> Images{get; set;}
}
Ну и конечно сделайте конструкторы.
Инициализация офиса будет такой
var office = new Office(
new Address(country, city, street, houseNumber),
new List<Employee>(),
new List<Tour>(),
new Contacts { Email = "office@mail"}
);