2011-08-16 33 views
1

我的映射员工和项目有问题:例如,在员工映射中,我有“包”来映射其他表。问题是,当我打开员工窗口时,这需要花费很多时间(10秒)打开窗口,我怎样才能使绘图更好,更快?也许在懒惰或在获取?如何使映射提高应用程序的速度?

这是员工的映射:

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

谢谢..

回答

1

您应该使用SQL Server Profiler要弄清楚什么是被从数据库加载。或者你可以设置NHibernate来记录SQL。通过这种方式,您可以更轻松地查看导致延迟的原因。很可能是由于热切地加载集合引起的(您的映射有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> 

您的多对一关联也热切地加载(fetch="join")。

其中一种流行的方法是使所有关联都是懒惰的(懒惰默认抓取计划)。然后在您确定需要关联加载的地方使用热切加载。但是,这取决于您的会话管理,因为如果会话不再可用,延迟加载将不起作用。在book中有一个很好的描述计划和策略。

0

为了您的包映射,请删除lazy =“false”。默认情况下是懒惰的。