Подход, который я бы выбрал для моделирования, заключается в следующем:
Объект Customer содержит ICollection PaymentPlans, который представляет планы, принятые клиентом.
PaymentPlan для Клиента будет отображаться с помощью пакета, который использует таблицу данных, чтобы определить, какой идентификатор клиента сопоставлен с каким PaymentPlans. При использовании cascade all-delete-orphan, если клиент был удален, будут удалены как записи из деталей, так и PaymentPlans, которыми владеет клиент.
Объект PaymentPlan содержит объект PlanTerms, который представляет условия плана платежей.
PlanTerms будет сопоставлен с PaymentPlan с использованием каскадного сохранения обновления много-к-одному, которое просто вставит ссылку на соответствующий объект PlanTerms в PaymentPlan.
Используя эту модель, вы можете создавать PlanTerms независимо, а затем, когда вы добавляете новый PaymentPlan к клиенту, вы создаете новый объект PaymentPlan, передающий соответствующий объект PlanTerms, а затем добавляете его в коллекцию соответствующего клиента. Наконец, вы должны сохранить клиента и позволить nhibernate каскадировать операцию сохранения.
В конечном итоге вы получите объект Customer, объект PaymentPlan и объект PlanTerms с клиентом (таблица клиента), которому принадлежат экземпляры PaymentPlans (таблица подробностей), которые все привязаны к определенным PlanTerms (таблица плана).
У меня есть несколько более конкретных примеров синтаксиса отображения, если это необходимо, но, вероятно, лучше проработать его с вашей собственной моделью, и у меня недостаточно информации о таблицах базы данных, чтобы привести какие-либо конкретные примеры.