2013-06-03 26 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更换

这当然会加载计数所有的时间(除了预测),所以三思之前使用它