NHibernateの実装とLazy Loadingを使用したプロジェクトがあります。このプロジェクトには、PersonとPersonIdentityという2つのクラスがあります。それら2つの間の関係は集約であり、1人のPersonIdentityを有することを意味する。NHibernateのクエリと最適なパフォーマンスの最適化方法
人のマッピングは次のとおりです。
<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マッピングは次のとおりです。
<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>
私の問題は、パフォーマンスです。私はこのような人だけにクエリを実行する場合:
SELECT * FROM Person_Identiyt WHERE Id = 1;
SELECT * FROM Person_Identiyt WHERE Id = 2;
SELECT * FROM Person_Identiyt WHERE Id = 3;
...
:
var q = SessionInstance.Query<Person>();
IList list = q.ToList<Person>();
私だけ
SELECT * FROM Person_Person
を実行それに加えて、データベース内の一人当たり、このようなクエリを実行期待します
そして怠け者のアプローチによると、それは良くありません。 PersonIdentityは呼び出すまでロードしないでください。 最初に読み込むためにPersonIdentityを持たないPersonだけをロードするにはどうすればよいですか?
人物のアイデンティティは常にあります – Ehsan