2013-06-03 5 views
0

hbm 파일에서 컨테이너에 할당 된 항목 수를 검색하려고합니다. 나는 약간의 파고를했고, 그럭저럭 나의 hbm 부호를 여기까지 얻을 수 있었다 (아래!). 컨테이너 개체를 쿼리 할 때마다 카운트가 검색되기를 원합니다. 요격기를 사용할 수는 있지만 더 나은 방법이 있다고 가정합니다. 올바른 방향으로 가고 있습니까? 아니면 카운트를 올리기 위해 다른 전략을 사용해야합니까?또 다른 NHibernate Mapping Mystery! hbm 파일에서 카운트 받기

감사합니다.

P. 당신은 몇 가지 계산 된 속성을 가져올해야하는 경우 우리는 당신이 formula과 매핑을 사용할 수 있습니다, NH 버전 2.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

을 사용하고 있습니다. 의 당신의 C# 클래스 확장하자 다음 Id가 '_this.Id'는 열 ID의 이름과 별명 같은 somethink로 대체됩니다

<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> 

당신의 매핑

public class Container 
{ 
    ... // ID, Capacity, Description 
    public virtual int MyCount { get; set; } 

을 그리고 확장

이것은 물론 계수를로드합니다 (투영 제외). 사용하기 전에 두 번 생각하십시오.