Очередная Тайна Картографии NHibernate! Получение счета в файле hbm
Я пытаюсь получить количество элементов, выделенных для контейнера в моем файле hbm. Я немного покопался и сумел получить свой код hbm так далеко (ниже!). Я хочу, чтобы счетчик получался каждый раз, когда запрашивается объект контейнера. Я мог бы использовать перехватчик, но я предполагаю, что есть лучший способ. Я на правильном пути или я должен использовать другую стратегию, чтобы загрузить счет?
Благодарю.
PS Мы используем NH v2.2
<?xml version="1.0" encoding="utf-8"?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" assembly="MyEntities" namespace="Entities.Containers"> <class name="Container" table="[Container]" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Capacity" column="Capacity">
<column name="Capacity" />
</property>
<property name="Description" column="Description" length="50" type="String">
<column name="Description" />
</property>
<loader query-ref="sqCurrentContainerAllocation"/> </class>
<sql-query name="sqCurrentContainerAllocation">
<return-scalar column="AllocatedItemsCount" type="int"></return-scalar>
SELECT COUNT(*) FROM [ContainerTracking]
WHERE [ContainerId] = :Id </sql-query>
</hibernate-mapping>
1 ответ
Если вам нужно получить рассчитанное свойство, вы можете использовать отображение с formula
, Давайте расширим ваш класс C#:
public class Container
{
... // ID, Capacity, Description
public virtual int MyCount { get; set; }
И расширить ваше отображение
<class name="Container" table="[Container]"
...
<property name="MyCount" insert="false" update="false" >
<formula>
(
SELECT count(*)
FROM [ContainerTracking] as ct
WHERE ct.[ContainerId] = Id
)
</formula>
</property>
Id
будет заменен чем-то вроде '_this.Id', именем столбца Id и его псевдонимом.
Это, конечно, будет постоянно загружать счет (кроме прогнозов), поэтому подумайте дважды, прежде чем его использовать