Учитывая, что города и страны не часто меняют названия, я бы сделал их свойства доступными только для чтения.Кроме того, рекомендуется создать метод в классе Country для добавления городов, чтобы обеспечить соблюдение отношения Country-City:
public class Country
{
public Country(string name)
{
this.Name = name;
}
// for NHibernate
protected Country()
{
this.Cities = new List<City>();
}
public virtual int Id { get; private set; }
public virtual string Name { get; private set; }
public virtual IList<City> Cities { get; private set; }
public virtual City AddCity(string name)
{
var city = new City(this, name);
this.Cities.Add(city);
return city;
}
}
public class City
{
public City(Country country, string name)
{
this.Country = country;
this.Name = name;
}
// for NHibernate
protected City()
{
}
public virtual int Id { get; private set; }
public virtual string Name { get; private set; }
public virtual Country Country { get; private set; }
}
Теперь имя доступно только для чтения независимо от способа доступа к объекту.Однако, если у вас есть случай, когда вы хотели бы иметь возможность изменить название страны или города, доступ к объекту «Страна» из города является лишь одним из способов доступа к нему, и нет ничего плохого в том, что вы можете изменить имя с помощьюкод в # 4.
Однако указанный код можно заставить работать, изменив стратегию доступа по умолчанию в отображении FluentNHibernate для свойства Country объекта City, чтобы оно сохраняло значение в поле _country, а не проходило черезсвойство.