Fluent Nhibernate导致Commit()上的System.IndexOutOfRangeException

时间:2009-09-18 11:25:53

标签: 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 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个属性。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是NHibernate生成的查询不能正确匹配其中一个表的要求。根据所提供的信息,我无法推断出正在发生的事情。在构建FluentConfiguration对象期间,将ShowSql()添加到OracleClientConfiguration中。然后在NUnit中再次运行测试,并注意生成的Sql将在控制台窗口中。它应该给你一个很好的起点,看看幕后发生了什么。如果这没有用,请将Sql带回来查看。