[SQL] NHibernate에 QueryOver가와에게 여러 SQL 쿼리와 DB 안타를 결과로 가져 오기
SQLNHibernate에 QueryOver가와에게 여러 SQL 쿼리와 DB 안타를 결과로 가져 오기
나는 엔티티를 선택하고 관련 목록을 가져 오기 위해 노력하고있어 :
Session.QueryOver<UserRole>()
.Fetch(x => x.UsersInRole).Eager
.List();
어떤 데이터베이스 안타가 많이 발생합니다. 첫 번째는 같은 것입니다 :
그리고 수백 개 이상의 개별 쿼리하는 뭔가를 다음과 같습니다
매핑은 다음과 같다 :
public class UserRoleMap : ClassMap<UserRole>
{
public UserRoleMap()
{
Id(x => x.Id);
Map(x => x.RoleName);
HasManyToMany(x => x.UsersInRole)
.Inverse()
.LazyLoad()
.Table("UsersInRoles");
}
}
해결법
-
==============================
1.나는이 문제가 우리가 기대해야 무엇이라고 말할 것입니다. 하자 우리는 시스템이 사용자와이 개 역할을하는 시나리오를 가지고
나는이 문제가 우리가 기대해야 무엇이라고 말할 것입니다. 하자 우리는 시스템이 사용자와이 개 역할을하는 시나리오를 가지고
User1 - Role1 // has only Role1 User2 - Role1 // now we see that Role2 has more then User1 User2 - Role2
하자 말은, 첫 번째 쿼리 것을, 오직 사용자 1과 그 일대 일대 관계 Role1을 검색합니다. Role1에 대한 사용자의 설정은 (우리가 재사용 순간에 ISession에로드 개체 수 없습니다) 불완전 그래서 우리가 순간에 ISession에있는 것은, 오직 사용자 1입니다. 하지만 어떻게 하나는 우리가 어디 있는지 알아야합니까? Role1에 대한로드 된 모든 데이터가 또는 세션에 있지 않은지?
Role1에 대한 데이터를로드하는 새로운 쿼리를 발행해야합니다. 그리고이 방법은, 우리는 마지막에 이러한 쿼리의 dosens을 가질 수 있습니다 ...
내가 최선의 해결책 (나는 거의 모든 시나리오에서 사용하고있다)로 참조하면 일괄 처리 크기 설정입니다 : 19.1.5. 배치 페칭 사용하기
HasManyToMany(x => x.UsersInRole) ... .BatchSize(25)
컬렉션은 .BatchSize (25)와 매핑을 모두 표시하고 심지어 클래스 맵뿐만 아니라 그렇게. 즉 더 후 1 SQL 스크립트를 야기하지만, 할 말 없습니다 더 후 1 + (2-4) 일괄 크기와 페이지 크기에 따라.
from https://stackoverflow.com/questions/19284228/nhibernate-queryover-with-fetch-resulting-multiple-sql-queries-and-db-hits by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엔티티 프레임 워크를 사용하여 SQL Server 데이터베이스에 대한 변경 사항을 저장하는 동안 검증은 하나 이상의 엔티티 실패 (0) | 2020.03.31 |
---|---|
[SQL] 삭제 쿼리는 MySQL의에서 작동하지 (0) | 2020.03.31 |
[SQL] 액세스 SQL에서 병합 대안 (0) | 2020.03.30 |
[SQL] 역사적 데이터를 올바르게 EAV 데이터베이스 설계 (0) | 2020.03.30 |
[SQL] 어떻게 SQL 서버에서 "날짜"데이터 유형을 사용할 수 있습니까? (0) | 2020.03.30 |