NHibernate: отображение различных динамических компонентов на основе дискриминатора - PullRequest
2 голосов
/ 16 апреля 2010

Каждый объект моего домена имеет набор «фиксированных» свойств и набор «динамических» свойств, которые можно добавлять во время выполнения. Я справляюсь с этим, используя функциональность динамического компонента 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 для этого сценария? Единственная трудность заключается в том, что все различные «типы» клиентов соответствуют одному и тому же классу клиентов.

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

Я думаю, что вы можете найти решение, используя динамические свойства ... в ваших подклассах обращайтесь к динамическим свойствам, таким как IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } }

Для меня интересно, как вы отображаете эти свойства таким образом, чтобы их можно было масштабировать ...

Вы придумали другое решение?

0 голосов
/ 23 апреля 2010

Может быть, глупый вопрос, но почему бы вам просто не использовать два подкласса Customer?

Кроме того, мне не сразу понятно, что вы хотите, чтобы NHibernate поддерживал. Не могли бы вы уточнить, что означает «любая поддержка в NHibernate для этого сценария», что вы хотите, чтобы NHibernate сделал для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...