I have a project by NHibernate implementation and using Lazy Loading. I have two class in this project : Person and PersonIdentity. Relation between Those two is aggregation, is mean a Person has a one PersonIdentity.
Person mapping is :
<class name="Person" table="Person_Person" >
<id name="Id" type="Int64" unsaved-value="0">
<generator class="native" />
</id>
<version name="Version" />
<property name="Name" column="Name"
type="String(255)" access="property" not-null="false" />
<one-to-one name="Identity" property-ref="Person"
class="Domain.Entities.PersonIdentity,Domain.Entities" cascade="delete" fetch="select" />
</class>
PersonIdentity mapping is :
<id name="Id" type="Int64" unsaved-value="0" >
<generator class="native" />
</id>
<property name="FirstName" column="FirstName" type="String(255)" access="property" not-null="false" />
<property name="LastName" column="LastName" type="String(255)" access="property" not-null="false" />
<many-to-one name="Person" column="Person_id_fk" uniqe="true" class="Domain.Entities.Person,Domain.Entities"
outer-join="auto" fetch="select" access="property" not-null="true" />
</class>
My problem is in performance. When i execute a query only on Person like this :
var q = SessionInstance.Query<Person>();
IList list = q.ToList<Person>();
I expect only execute
SELECT * FROM Person_Person
But in addition, per person in a database, execute a query like this :
SELECT * FROM Person_Identiyt WHERE Id = 1;
SELECT * FROM Person_Identiyt WHERE Id = 2;
SELECT * FROM Person_Identiyt WHERE Id = 3;
...
And According to lazy approach it is not good, PersonIdentity not should loaded until call it. How can i load only Persons without PersonIdentity for first loading?