2011-08-24 2 views
3

저장 프로 시저를 NamedQuery로 호출하면 작동 중임 . 구성 요소를로드하려고하면 문제가 발생합니다. 저장 프로 시저이NHibernate : 저장 프로 시저 및 구성 요소

같은 레코드 [IDEmployee, EmployeeName, 도시, 국가] IDEmployee 및 EmployeeName 속하는 매핑 된 엔티티와 도시와 국가 구성 요소에서 어디

가 여기

가 제공

을 반환 매핑 :

:

<class name="Employee" table="employees"> 
    <id name="IDEmployee"> 
     <column name="idemployee" /> 
     <generator class="native" /> 
    </id> 
    <property name="EmployeeName "> 
     <column name="employeename" /> 
    </property> 
    <component name="Address" class="Address"> 
     <property name="City"> 
     <column name="city" /> 
     </property> 
     <property name="Country"> 
     <column name="country" /> 
     </property> 
    </component> 
    </class> 

이것은 내가 저장 프로 시저를 호출하기 위해 사용하는 코드입니다

여기 코드는 내가 전화를 사용하는 저장 : 여기

var result = 
    session<ISession>().GetNamedQuery("GetEmployeesByCompany") 
       .SetInt32("idcompany", companyId) 
       .List<Employee>().ToList(); 

내가 구성 요소 모두가 잘 작동지도에서 제거하는 경우 내 응용 프로그램

System.IndexOutOfRangeException: t1_282_0_ 
    at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) 
    at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) 
in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\NullableType.cs:line 236 
    at NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session) 
in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2508 
    at NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session) 
in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 991 

을 실행할 때 내가 오류. 또한 return-property를 중첩 된 return-column으로 성공시키지 않고 시도했습니다.

팁이 있습니까? 고맙습니다!

+0

사이드 노트 .. 그리고 그것은 너무 늦었을 수도 있습니다. 당신은 NHibernate 대신에 iBatis를 보았습니까? 스토어드 프로 시저 작업에 더 초점을 맞추고 있습니다. –

+0

그건 소중한 제안입니다, 나는 다음 번에 시도해 보겠습니다! – xtblitz

답변

4

최근이 문제에 직면해야했습니다. 이것이 내가 나올 수있는 방법입니다.

<sql-query name="GetEmployeesByCompany"> 
    <return class="Employee"> 
    <return-property column="idemployee" name="IDEmployee" /> 
    <return-property column="employeename" name="EmployeeName" /> 
    <return-property name="Address"> <!-- name of the component --> 
     <return-column name="city" /> <!-- name of the resultset field --> 
     <return-column name="country" /> <!-- name of the resultset field --> 
    </return-property> 
</return> 
EXEC GetEmployeeByCompany:idcompany 

당신이 반환 속성 내부의 필드에 사용하는 순서

는 결과 집합에서 하나와 일치해야합니다 매우 중요합니다. 문서가 전혀 없습니다. 도움이 되었기를 바랍니다.

+0

그건 속임수 야 !! 그것은 일했다 !!!! – xtblitz