我需要做的是基本上映射这两个实体,它们是实际的简化版本。
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(飞机)之后调用transaction.Commit时,我得到一个异常:“System.IndexOutOfRangeException:此OracleParameterCollection的索引22无效,Count = 22 “。飞机类(和表)有22个属性。
有人有什么想法吗?
答案 0 :(得分:0)
问题是NHibernate生成的查询不能正确匹配其中一个表的要求。根据所提供的信息,我无法推断出正在发生的事情。在构建FluentConfiguration对象期间,将ShowSql()添加到OracleClientConfiguration中。然后在NUnit中再次运行测试,并注意生成的Sql将在控制台窗口中。它应该给你一个很好的起点,看看幕后发生了什么。如果这没有用,请将Sql带回来查看。