Каждый объект моего домена имеет набор «фиксированных» свойств и набор «динамических» свойств, которые можно добавлять во время выполнения. Я справляюсь с этим, используя функциональность динамического компонента NHibernate.
public class Product {
public virtual Guid Id { get; }
public virtual string Name { get; set;}
public virtual IDictionary DynamicComponents { get; }
}
Теперь у меня следующая ситуация
public class Customer {
public virtual Guid Id { get; }
public virtual string Type { get; set;}
public virtual IDictionary DynamicProperties { get; }
}
Где CustomerType - это что-то вроде "Online" или "InPerson" . Кроме того, онлайн-клиент имеет динамические свойства «Имя» и «IP-адрес» , а клиент InPerson имеет динамические свойства «Имя» и «Продавец» .
Какие типы клиентов доступны, а дополнительные свойства для них настраиваются в метаданных, которые используются для генерации файлов hbm при запуске приложения.
Я мог бы придумать, как собрать это вместе, используя промежуточный слой DTO, но есть ли какая-либо поддержка в NHibernate для этого сценария? Единственная трудность заключается в том, что все различные «типы» клиентов соответствуют одному и тому же классу клиентов.