Вы можете скрыть коллекцию, сделав ее защищенной или даже закрытой.NHibernate все равно найдет его.В качестве альтернативы вы можете заставить получателя сбора вернуть неизменную коллекцию, когда статус продаж является ограниченным значением.
private ISet<Payment> _payments;
public virtual ISet<Payment> Payments
{
get
{
if (Status == SalesStatus.Confirmed)
return new ImmutableSet<Payment>(_payments);
return _payments;
}
private set { _payments = value; }
}
Размещение правил проверки в установщиках также хорошо.Вы можете указать NHibernate для прямого доступа к полю поддержки (вам может понадобиться добавить поле поддержки, если вы в настоящее время используете авто свойства).
<property name="_name" access="field"/>
<property name="Description" access="nosetter.camelcase-underscore"/>
Изменить для дополнительного вопроса ...
Я не склонен генерировать исключения, пока не произойдет сохранение.Бросать их раньше, как в установщике свойств, может раздражать разработчики пользовательского интерфейса, которые вынуждены возвращаться к пользователю только с одной ошибкой за раз.Я также в основном работаю с приложениями MVC, поэтому в последнее время я использую атрибуты проверки System.ComponentModel.DataAnnotations.Хотя в некоторых отношениях они ограничены, они хорошо работают с MVC для проверки моделей в браузере и в контроллере.Однако, если вы используете их, я рекомендую создать собственный перехватчик, чтобы проверить их перед сохранением.Перехватчик - это то место, где я выброшу исключение, если что-то не так.