Как отобразить интерфейс в nhibernate?

Я использую два класса NiceCustomer & RoughCustomer какой implment интерфейс ICustomer.

ICustomer имеет четыре свойства. Они:

  1. Property Id() As Integer
  2. Property Name() As String
  3. Property IsNiceCustomer() As Boolean
  4. ReadOnly Property AddressFullText() As String

Я не знаю, как отобразить интерфейс ICustomer, к базе данных.

Я получаю ошибку как это во внутреннем исключении.

Ассоциация обращается к неотображенному классу: ICustomer

Я использую Быстрый и NHibernate.

7
задан Stephan Bauer 29 November 2016 в 15:50
поделиться

2 ответа

Невозможно отобразить интерфейс в nhibernate. Если ваша цель - иметь возможность выполнять запросы с использованием общего типа для получения обоих типов клиентов, вы можете использовать полиморфный запрос. Просто пусть оба ваших класса реализуют интерфейс и обычно сопоставляют классы. См. Эту ссылку:

https://www.hibernate.org/hib_docs/nhibernate/html/queryhql.html (раздел 11.6)

-1
ответ дан 7 December 2019 в 16:41
поделиться

как вы спрашиваете? Если вы используете HQL, вам нужно импортировать пространство имен интерфейса с файлом HBM с помощью этой строки:

<import class="name.space.ICustomer, Customers" />

Если вы используете Criteria, вы должны просто иметь возможность запросить ICustomer, и он вернет оба типа клиентов.

Если вы отображаете класс, в котором есть клиент, через HasMany, HasManyToMany или ссылки, тогда вам нужно использовать общую форму:

References<NiceCustomer>(f=>f.Customer)

Если вы хотите, чтобы он справлялся с любым из них, вам необходимо сделайте их подклассами

Subclassmap<NiceCustomer>

В этом случае, я думаю, вам понадобится базовый класс Customer и используйте его для параметра универсального типа во внешнем классе:

References<Customer>(f=>f.Customer)

Тем не менее, вы не должны изменять модель своей предметной области, чтобы справиться с этим, у него все еще должен быть ICustomer во внешнем классе.

Я не уверен, есть ли в 1.0RTM универсальная форма, работающая для ссылок, но быстрое сканирование изменений должно показать изменение, которое, как мне кажется, представляет собой добавление в две строки.

0
ответ дан 7 December 2019 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: