嘿。我一直试图弄清楚如何配置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