나는 nhiberante 3.0을 사용하여 asp mvc를 사용하여 구축중인 웹 앱을 보유하고 있습니다. 나는 내 데이터를 질의 할 수있는 다음과 같은 코드가 -mhc를 사용하여 nhibernate를 사용하여 eager 로딩 엔티티를 열 때
ICriteria rowCount = session.CreateCriteria(typeof(entity1));
rowCount.SetResultTransformer(CriteriaSpecification.DistinctRootEntity)
.SetProjection(Projections.RowCount());
ICriteria query = session.CreateCriteria(typeof(entity1));
query.SetFetchMode("entity2", FetchMode.Eager);
query.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);
query.SetFirstResult((pageIndex - 1) * pageSize);
query.SetMaxResults(pageSize);
query.Future<entity1>();
return new PagedList<entity1>(query.List<cshearin>(), pageIndex, pageSize, rowCount.List<Int32>().FirstOrDefault());
지금이 내 시야에 올바른 데이터를 반환,하지만 성능이 끔찍한입니다. 엔티티 2를 열망하지 않는다면 성능이 좋습니다. 유일한 문제는보기가 내가 읽은 데이터로 작업하는 것이 좋은 습관이 아니라는 것입니다.
보기를 조금만해도 괜찮습니까? 아니면 나쁜 습관입니까? 나쁜 습관 인 경우 데이터 액세스를 위해이 클래스를 빌드 할 수있는 더 좋은 방법이 있습니까?
아무쪼록 고맙습니다.
편집 - 내 매핑은 매우 간단합니다. 다음은 단순화 된 버전입니다.
entity1 -
<class name="entity1">
<id name="entity1_id">
<generator class="guid.comb"></generator>
</id>
<property name="column"></property>
<property name="column"></property>\
<bag name="entity2" cascade="all">
<key column="entity2_fk" />
<one-to-many class="entity2"/>
</bag>
</class>
및 entity2 - 나는 또한 내보기에 전달 예측을 사용하여 조사 할 것이다
<class name="entity2">
<id name="entity2_id">
<generator class="guid.comb"></generator>
</id>
<many-to-one name="entity1" column="entity2_fk" />
<property name="columnx"></property>
<property name="columny"></property>
</class>
- 올바른 해답이 될 수 있습니다.
실제로 평가하려면 매핑을 확인해야합니다. 그러나, 나는 일반적으로 NHibernate Session에 의해 관리 될 필요가 없으므로 엔터티를 내보기로 전달하지 않고 Projections를 대신 사용합니다. 마지막으로 ICriteria에는 'UniqueResult'라는 메서드가 있습니다.이 메서드는 rowCount 쿼리에 사용할 수 있습니다. – Vadim
야드, 엔티티 대신 프로젝션을 사용하는 방법에 대해 자세히 설명해 주시겠습니까? – czuroski