У меня есть иерархия наследования, которую я отобразил в NHibernate, используя Table-per-class. Мой файл сопоставления выглядит так, как показано ниже (многие свойства опущены).
Чтобы запросить эту иерархию, я создаю динамический DetachedCriteria для Сообщение на основе входных данных фильтра от пользователя. Сообщения (любого типа в иерархии) должны быть возвращены пользователю в одном списке.
- Я хотел бы построить критерии, основанные на типе сообщения, т.е. пользователь может указать, чтобы получать все сообщения типа SMSMessage или EmailMessage с ReceivedDate > '2009-01-01'. Как мне это сделать?
- В том же запросе пользователь может указать, что если сообщение является InternalMessage , оно должно иметь Priority = 2. Как я могу указать такие предикаты, специфичные для типа? 1022 *
Все это возможно сделать в LINQ, поэтому я надеюсь, что смогу сделать это и в NHibernate.
<class name="Message" table="Message" abstract="true" discriminator-value="null">
<id name="MessageId">
<generator class="identity" />
</id>
<discriminator column="Type" type="byte" />
<property name="ParentId" />
<property name="ReceivedDate" />
...
<subclass name="SMSMessage" discriminator-value="0">
<property name="Text" column="Text" />
...
</subclass>
<subclass name="MMSMessage" discriminator-value="1">
<property name="Subject" />
...
</subclass>
<subclass name="EmailMessage" discriminator-value="2">
<property name="BodyPlainText" />
...
</subclass>
<subclass name="InternalMessage" discriminator-value="4">
<property name="Priority" />
...
</subclass>
</class>