Fluent nhibernate Fluent Nhibernate在提交()时导致System.IndexOutOfRangeException
你好。几天来,我一直在试图弄清楚如何使用NH和FluentNH配置映射,我想我差不多做到了,但还不完全做到。我有以下问题 我需要做的是基本上映射这两个实体,它们是实际实体的简化版本Fluent nhibernate Fluent Nhibernate在提交()时导致System.IndexOutOfRangeException,fluent-nhibernate,mapping,Fluent Nhibernate,Mapping,你好。几天来,我一直在试图弄清楚如何使用NH和FluentNH配置映射,我想我差不多做到了,但还不完全做到。我有以下问题 我需要做的是基本上映射这两个实体,它们是实际实体的简化版本 Airlines varchar2(3) airlineCode //PK varchar2(50) Aircraft varchar2(3) aircraftCode //composite PK varchar2(3) airlineCode //composite PK, FK referencing PK
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;
}
class航空公司
{
字符串航空代码;
字符串名称;
IList舰队;
}
等级飞机
{
航空公司;
字符串飞机代码;
字符串航空器名称;
}
使用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");
航线图
表(“航空公司”);
Id(x=>x.AirlineCode);
Map(x=>x.AirlineName);
HasMany(x=>x.Fleet)
.KeyColumn(“航空公司”);
飞机图
表(“飞机”);
复合ID()
.KeyProperty(x=>x.AircraftCode)
.KeyReference(x=>x.Airline);
地图(x=>x.AircraftName);
参考(x=>x.Airline)
.栏(“航空公司”);
使用Nunit,我正在测试另一个飞机的添加,但在调用transaction.Commit after session.Save(飞机)时,我得到一个异常:“System.IndexOutOfRangeException:此OracleParameterCollection的无效索引22,计数=22。”飞机类(和表)有22个属性
有人有什么想法吗?问题是NHibernate生成的查询与您的一个表的要求不匹配。根据所提供的信息,我不能完全推断出发生了什么事。在构建FluentConfiguration对象期间,将ShowSql()添加到OracleClientConfiguration中。然后在NUnit中再次运行测试,并注意生成的Sql将出现在控制台窗口中。这应该给你一个很好的起点,看看引擎盖下到底发生了什么。如果没有帮助,请将Sql带回SO查看。生成的唯一Sql用于选择航空公司。在CanadaAircraft()的NUnit测试中,我有IAircraftRepository repo=new AircraftRepository();飞机a=新飞机(Airline=new Airline{AirlineCode=“BAW”},AircraftCode=“752”};repo.AddAircraft(a);存储库方法为public void AddAircraft(飞机a){使用(ISession session=Helper.OpenSession()){使用(ITransaction tx=session.BeginTransAction()){session.Save(a);tx.Commit();}}