2011-08-16 2 views
1

내 매핑에 문제가 있습니다. 직원 및 프로젝트 : 예를 들어 직원 매핑에서 다른 테이블을 매핑하는 데 "가방"이 있습니다. 문제는 직원 창을 열 때입니다.이 작업은 창을 여는 데 많은 시간 (10 초)이 걸립니다. 매핑을 어떻게하면 더 빠르게 만들 수 있습니까? 어쩌면 게으름 또는 가져 오기? 당신은 당신의 데이터베이스에서로드되고 있는지 알아 내기 위해 SQL Server Profiler를 사용해야합니다응용 프로그램의 속도를 향상시키기 위해 매핑을 만드는 방법은 무엇입니까?

답변

1

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="AdminProject" 
        namespace="AdminProject.Business.Entity"> 
    <class name="Employee"> 

    <id name="EmployeeId" type="int">  
    </id> 

    <property name="OperatorNum" 
     generated="always" 
     update="false" 
     insert="false" 
     type="int"/> 
    <property name="Password" type="string"/> 
    <property name="Name" type="string"/> 
    <property name="LastName" type="string"/> 
    <property name="DateBegin" type="DateTime"/> 
    <property name="DateEnd" type="DateTime"/> 
    <property name="Telephone" type="string"/> 
    <property name="Address" type="string"/> 

    <many-to-one 
     name="EmployeeState" 
     column="EmployeeStateId" 
     class="EmployeeState" 
     fetch="join"/> 

    <bag name="EmployeebyProject" lazy="false"> 
     <key column="EmployeeId"/> 
     <one-to-many class="EmployeebyProject"/> 
    </bag> 

    <bag name="EmployeeComments" lazy="false"> 
     <key column="EmployeeId"/> 
     <one-to-many class="EmployeeComments"/> 
    </bag> 

    </class> 

</hibernate-mapping> 

감사합니다 .. :

는 직원의 매핑입니다. 또는 SQL을 로그하도록 NHibernate를 설정할 수 있습니다. 이렇게하면 지연의 원인을 쉽게 볼 수 있습니다. 열심히 컬렉션을로드하여 발생했을 가능성이 큽니다 (매핑에 lazy="false"). 이 경우 단순히 true (기본값)로 설정할 수 있습니다.

<bag name="EmployeebyProject" lazy="true"> 
    <key column="EmployeeId"/> 
    <one-to-many class="EmployeebyProject"/> 
</bag> 

<bag name="EmployeeComments" lazy="true"> 
    <key column="EmployeeId"/> 
    <one-to-many class="EmployeeComments"/> 
</bag> 

여러분의 많은-to-one 연관은 (fetch="join") 열심히로드됩니다.

인기있는 방법 중 하나는 모든 연결을 게으르게 만드는 것입니다 (Lazy Default Fetch Plan). 그리고 연관로드가 필요할 것 같은 장소에서 열심히로드하십시오. 그러나 세션을 더 이상 사용할 수없는 경우 지연로드가 작동하지 않으므로 세션 관리에 따라 다릅니다. 이 book에는 가져 오기 계획 및 전략에 대한 설명이 아주 잘 나와 있습니다.

0

가방 매핑의 경우 lazy = "false"를 제거하십시오. 기본적으로 게으르다.

관련 문제