2013-06-03 70 views
0

我正在嘗試檢索分配給我的hbm文件中的容器的項目的計數。我已經做了一些挖掘,並設法讓我的hbm代碼到目前爲止(下面!)。我希望每次查詢容器對象時都要檢索計數。我可以使用攔截器,但我認爲還有更好的方法。我在正確的軌道上,還是應該使用不同的策略來加載計數?另一個NHibernate映射神祕!在HBM文件中獲取計數

謝謝。

P.S.我們使用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> 
+0

我會做一些分析,看看有什麼被用N執行H。敬請關注。 – maxxxxxim

回答

0

如果你需要得到一些計算屬性,你可以使用映射與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的名字和它的別名somethink更換

這當然會加載計數所有的時間(除了預測),所以三思之前使用它