嘿。我一直試圖弄清楚如何配置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,我映射它像這樣
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");
使用NUnit,我測試加入另一架飛機,但在調用交易。在session.Save(飛機)之後提交,我收到一個異常:「System.IndexOutOfRangeException:此Count爲22的OracleParameterCollection的索引22無效。」飛機類(和表)有22個屬性。
任何人有任何想法?
唯一生成的Sql用於選擇航空公司。 (),我有 IAircraftRepository repo = new AircraftRepository();我有 在我的NUnit測試CanAddAircraft(), 飛機=飛機新(航空=新航空公司{AirlineCode = 「BAW」},AircraftCode = 「752」}; repo.AddAircraft(一); 存儲庫的方法是 公共無效AddAircraft(飛機一個) { 使用(ISession的會話= Helper.OpenSession()){ 使用 (ITransaction TX = session.BeginTransAction()){ session.Save(一); tx.Commit();} } } – Moss 2009-09-21 10:11:35