NHibernate пользовательский тип набора

Мне называли объект объекта Patient и этому объекту называли свойство Visits который имеет тип VisitsCollection.

VisitsCollections дочерний класс IList<Visit> но это также добавляет некоторую пользовательскую логику к набору (как автоматическое упорядочивание, некоторая проверка, уведомления, и т.д.).

Я должен использовать пользовательский тип набора, поскольку он добавляет некоторые данные к объектам, которые добавляются к набору, и выполняет некоторые другие документы прозрачно.

Теперь я хочу отобразить это в NHibernate, таким образом, я создал:

<list name="Visits" lazy="true" fetch="select">
    <key foreign-key="PatientId" />
    <index column="Timestamp" />
    <one-to-many class="Visit" not-found="ignore"/>
</list>

Я получаю исключение:

Не мог бросить объект типа 'NHibernate. Набор. PersistentList' для ввода '... VisitsCollection'

Каждый раз, когда я получаю доступ к свойству посещений.

Я также попытался отобразить его этот путь:

<list name="Visits" lazy="true" fetch="select" collection-type="VisitsCollection">
    <key foreign-key="PatientId" />
    <index column="Timestamp" />
    <one-to-many class="Visit" not-found="ignore"/>
</list>

но тем не менее, я получаю это исключение:

Пользовательский тип не реализует UserCollectionType:..... VisitsCollection

Я не хочу наследовать мой VisitsCollection от любого типа NHibernate, поскольку класс набора является частью платформы, что я хочу, чтобы это было агностиком DAL (поскольку это будет использоваться во многих сценариях - не только с базой данных).

Какие-либо идеи о том, как отобразить это, сохранив структуру моего кода?

Заранее спасибо.

7
задан Agustin Meriles 23 April 2013 в 18:09
поделиться

2 ответа

Я никогда не использую пользовательские типы коллекций, в основном потому, что мне лень. NHibernate хочет, чтобы вы использовали IUserCollectionType, как я полагаю, а это требует некоторой сантехники.

Вместо этого я бы остановился на использовании методов расширения, как обсуждал Billly McCafferty. Но у вас код написан так...

В качестве альтернативы, вы можете отобразить вашу коллекцию как компонент, как обсуждалось здесь Колином Джеком. Это может быть проще для вашего сценария?

Также проверьте этот поток SO.

6
ответ дан 7 December 2019 в 07:44
поделиться

Я также голосую за то, чтобы не использовать пользовательские коллекции. В любом случае, вы можете сделать это через компонент.

<component name="Warehouses" class="Core.Domain.Collections.EntitySet`1[Core.Domain.OrgStructure.IWarehouseEntity,Core],Core">
<set name="_internalCollection" table="`WAREHOUSE`" cascade="save-update" access="field" generic="true" lazy="true" >
  <key column="`WarehouseOrgId`" foreign-key="FK_OrgWarehouse" />
  <!--This is used to set the type of the collection items-->
  <one-to-many class="Domain.Model.OrgStructure.WarehouseEntity,Domain"/>
</set>

How to map NHibernate custom collection with fluentNHibernate?

1
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

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