2013-04-09 1 views
0

I가 다음과 같은 테이블 :NHibernate에이 - 많은 있음 - 가지고 하나 - ICriteria

표 재질
아이디
표 존
아이디
표 MaterialZone
아이디
Material_Id
Zone_Id
가격


편집
나는 관계 때문에, 나는 매핑 또는 쿼리하여 해결할 수 있는지 잘 모릅니다, 재질 객체의 MaterialZone (오순절 현재 영역)하는 것입니다 무엇이 필요 "ID"는 MaterialZone 테이블에 있습니다.

내가 처음 IList의 < "MaterialZone">하고 목록에서 MaterialZone 속성 검색을 추가하고지도하기 위해 노력하고 현재의 지역과 하나를 반환

MapMaterialZone() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     ///Properties 
     References(x => x.Material).Column("material_id"); 
     References(x => x.Zone).Column("zone_id"); 
    } 

MapZona() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     ///Properties 
    } 
MapMaterial() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     ///Properties 
     //HasMany(x => x.ListMaterialZone); 
     //HasOne(x => x.IndividualMaterialZone).PropertyRef(MaterialZona => MaterialZona.Material); 
    } 

지도,하지만 쿼리와 컨트롤이 너무 느립니다. (임원은 ComponentOne에 액세스)

매핑과 Querys에서이 문제를 해결하려고 노력했지만 많은 행운이 없었습니다. 나는 NHibernate와 매핑에서 중간 경험을 가지고 있으며 QueryOver와 ICriteria에서 약간의 경험이있다.

모든 솔루션에 대해 열려 있지만 (불행히도 액세스가 있어야한다.) 감사.

+1

안녕을 발견, 당신은 실제로 질문을하지 않았다. 편집하고 질문 해주십시오. 또한 매핑 파일과 클래스를 복사하여 붙여 넣는 경우에도 유용합니다. 더 많은 정보를 포기할수록 다른 사람이 귀하의 질문에 쉽게 대답 할 수 있습니다. 감사. –

+0

진실한 사실, 나는 내가 질문을 물을 수 없었던 것을 설명하면서 매우 바빴다, 미안하다 그것의 나의 처음, 나는 지위를 편집 할 것이다 – leomcpugo

답변

0

I've는 용액 내 매핑

MaterialMap 
HasOne(x => x.MaterialZona).PropertyRef(materialZona => materialZona.Material); 

최종 QueryOver

ISession session = GetSession(); 
Zona zonaPredeterminada = GetDefaultZone(); 
Material materialAlias = null; 
MaterialZona materialZonaAlias = null; 

return session.QueryOver<Material>(() => materialAlias) 
    .JoinQueryOver(mat => mat.MaterialZona,() => materialZonaAlias) 
    .Where(mZ => mZ.Zona.Id == zonaPredeterminada.Id) 
    .And(mZ => mZ.Material.Id == materialAlias.Id) 
    .List();