2010-02-05 4 views
1

NHibernate에서 간단한 매핑 문제가있는 것처럼 보입니다. 그러나 몇 일 동안이 문제에 대한 해결책을 찾는데 어려움을 겪었습니다. VS2005에서 VB.NET을 사용하고 있습니다.NHibernate 버전 2.1.2.4000 매핑 안 새끼 문제

솔루션 : PsalertsIP
프로젝트 (조립) : 코어

폴더 데이터 (네임 스페이스 PsalertsIp.Core.Data)
이 저장소 클래스 예와의 통신을위한 인터페이스를 포함합니다 : PsalertsEventRepo를 다음과 같이 내 VS2005 솔루션 구조는 구현 IPsalertsEventRepo

폴더 도메인 (네임 스페이스 PsalertsIP.Core.Domain) 가 예 모든 POCO 도메인 객체와 관련 인터페이스를 포함합니다 : PsalertsEvent이 IPsalertsEvent를 구현을 다음과 같이

는 또한 어셈블리 '코어'아래에있는 NHibernate에 설정 파일과 PsalertsEvent 클래스의 매핑 파일입니다 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="Core" 
        namespace="Core.Domain"> 
    <class name="PsalertsEvent" table="Source_table" lazy="true"> 
    <id name="Id" column="Id" type="long" unsaved-value="0" 
     access="field.camelcase-underscore"> 
     <generator class="native" > 
     <param name="sequence">My_Oracle_Sequence</param> 
     </generator> 
    </id> 
    <property name="Substation" column="Field1" /> 
    <property name="BusbarId" column="Field2" /> 
    <property name="PlantId" column="Field3" /> 
    <property name="AlarmName" column="Field4" /> 
    <property name="AlarmStatus" column="Field5" /> 
    <property name="EventTime" column="Field6" /> 
    </class> 
</hibernate-mapping> 

내가 NHibernate에 환경의 간단한 테스트를 수행하려고 시도 NUnit을 통해 (NHibernate 설정을 테스트하는 간단한 차량이 필요하지만 단위 테스트가 아니라는 점을 인정하면서) 테스트가 실패하고 NUnit에서 다음 출력을 관찰합니다.

PsalertsIp.Tests.Data.PSALERTSEventRepoTests (TestFixtureSetUp) :
System.TypeInitializat ionException : 'Nested'의 형식 이니셜 라이저에서 예외가 발생했습니다.
----> NHibernate.MappingException : PsalertsEvent.hbm.xml
----> NHibernate.MappingException : 매핑 문서 컴파일 할 수 없습니다 영속 클래스의 Core.Domain.PsalertsEvent, 코어 찾을 수 없습니다
을 --- -> System.TypeLoadException : 'Core, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'어셈블리에서 'Core.Domain.PsalertsEvent'유형을로드 할 수 없습니다.

이 문제는 VS2005의 솔루션 구조와 관련이 있다고 생각되지만, 여러 다른 어셈블리/네임 스페이스 순열을 테스트 한 결과 아무 소용이 없습니다.

답변

2

hibernate-mapping 요소의 namespace 속성을 "PsalertsIP.Core.Domain"(위에서 지정한대로)으로 변경해야한다고 생각합니다.

또한 hibernate-mapping 요소의 어셈블리 속성이 프로젝트의 전체 어셈블리 이름 (프로젝트 -> 속성 -> 응용 프로그램 탭을 마우스 오른쪽 단추로 클릭)을 지정하는지 확인하십시오.

hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
       assembly="Core" 
       namespace="PsalertsIP.Core.Domain">