2009-09-18 2 views
0

안녕하세요. 나는 며칠 동안 NH와 FluentNH를 사용하여 매핑을 구성하는 방법을 알아 내려고 노력해 왔으며, 나는 거의 거기에 있다고 생각한다. 나는 다음과 같은 문제가있다.Fluent Nhibernate가 Commit()에서 System.IndexOutOfRangeException을 발생시킵니다.

기본적으로 실제 엔티티의 단순화 된 버전 인이 두 엔티티를 매핑합니다.

Airlines 
varchar2(3) airlineCode //PK 
varchar2(50) 

Aircraft 
varchar2(3) aircraftCode //composite PK 
varchar2(3) airlineCode //composite PK, FK referencing PK in Airlines 
varchar2(50) aircraftName 

내 클래스

class Airline 
{ 
    string AirlineCode; 
    string AirlineName; 
    IList<Aircraft> Fleet; 
} 

class Aircraft 
{ 
    Airline Airline; 
    string AircraftCode; 
    string AircraftName; 
} 

이 FluentNH을 사용하여처럼, 정말 NUnit을 사용

AirlineMap 
    Table("Airlines"); 
    Id(x => x.AirlineCode); 
    Map(x => x.AirlineName); 
    HasMany<Aircraft>(x => x.Fleet) 
     .KeyColumn("Airline"); 

AircraftMap 
    Table("Aircraft"); 
    CompositeId() 
     .KeyProperty(x => x.AircraftCode) 
     .KeyReference(x => x.Airline); 
    Map(x => x.AircraftName); 
    References(x => x.Airline) 
     .Column("Airline"); 

, 내가 다른 항공기의 추가를 테스트하는 것 같은 그것을 매핑,하지만 전화 거래시 .Commit after session.Save (aircraft), 예외가 발생합니다. "System.IndexOutOfRangeException :이 OracleParameterCollection의 인덱스 22가 잘못되었습니다 (Count = 22)." Aircraft 클래스 (및 테이블)에는 22 개의 속성이 있습니다.

누구든지 아이디어가 있습니까?

답변

0

문제는 NHibernate가 테이블 중 하나의 요구 사항과 제대로 일치하지 않는 쿼리를 생성하고 있다는 것입니다. 제공된 정보를 기반으로 진행되는 작업을 추론 할 수는 없습니다. FluentConfiguration 객체를 생성하는 동안 ShowSql()을 OracleClientConfiguration에 추가하십시오. 그런 다음 NUnit에서 다시 테스트를 실행하고 생성 된 Sql이 콘솔 창에 표시되는지 확인하십시오. 두포에서 실제로 일어나고있는 것을보기 위해 좋은 출발점을 제공해야합니다. 도움이되지 않는다면 Sql을 다시 볼 수 있도록 가져 오십시오.

+0

생성 된 Sql은 항공사 선택 전용입니다. CanAddAircraft()에 대한 NUnit 테스트에서 IAircraftRepository repo = new AircraftRepository(); 항공기 A = 새로운 항공기 (항공 = 새로운 항공 {AirlineCode = "BAW"} AircraftCode가 = "752"} repo.AddAircraft (a) 저장소 방법 공개 무효 AddAircraft이다 (항공기 a) { 사용 (ISession 세션 Helper.OpenSession =()) { 사용 (ITransaction의 TX = session.BeginTransAction()) { session.Save (a) tx.Commit(); }}} – Moss

관련 문제