안녕하세요. 나는 며칠 동안 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 개의 속성이 있습니다.
누구든지 아이디어가 있습니까?
생성 된 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