尝试使用nHibernate保存()/insert时发生IndexOutfrange异常

尝试使用nHibernate保存()/insert时发生IndexOutfrange异常,hibernate,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Hibernate,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,当我从数据库中取出数据时,我有两个实体在一起玩得很好,但现在我正试图保存一些东西,我遇到了一个奇怪的错误,消除并不能帮助我找到原因: 预订 public class Booking { public virtual int Id { get; set; } public virtual Int32 bookingID { get; set; } } public class BookingMap : ClassMap<Booking> { public B

当我从数据库中取出数据时,我有两个实体在一起玩得很好,但现在我正试图保存一些东西,我遇到了一个奇怪的错误,消除并不能帮助我找到原因:

预订

public class Booking
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
}
public class BookingMap : ClassMap<Booking>
{
    public BookingMap()
    {
        Table("Bookings");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        HasMany(x => x.BookingLocations)                
           .KeyColumn("BookingID")
          .Not.LazyLoad().Cascade.All(); 
    }
}
public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");


        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}
预订地点

public class BookingLocation
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
    public virtual Int32 locationID { get; set; } 
    public virtual DateTime startDateTime { get; set; }
    public virtual DateTime endDateTime { get; set; }
}
预订映射

public class Booking
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
}
public class BookingMap : ClassMap<Booking>
{
    public BookingMap()
    {
        Table("Bookings");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        HasMany(x => x.BookingLocations)                
           .KeyColumn("BookingID")
          .Not.LazyLoad().Cascade.All(); 
    }
}
public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");


        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}
公共类BookingMap:ClassMap
{
公共预订地图()
{
表(“预订”);
Id(x=>x.Id)。列(“Id”);
Map(x=>x.bookingID).Column(“bookingID”);
有许多(x=>x.BookingLocations)
.KeyColumn(“BookingID”)
.Not.LazyLoad().Cascade.All();
}
}
图书位置映射

public class Booking
{
    public virtual int Id { get; set; }
    public virtual Int32 bookingID { get; set; }
}
public class BookingMap : ClassMap<Booking>
{
    public BookingMap()
    {
        Table("Bookings");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        HasMany(x => x.BookingLocations)                
           .KeyColumn("BookingID")
          .Not.LazyLoad().Cascade.All(); 
    }
}
public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.bookingID).Column("BookingID");

        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");


        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}
公共类BookingLocationMap:ClassMap
{
公共BookingLocationMap()
{
表(“预订位置”);
Id(x=>x.Id)。列(“Id”);
Map(x=>x.bookingID).Column(“bookingID”);
Map(x=>x.locationID).Column(“LID”);
Map(x=>x.startDateTime).Column(“startDateTime”);
Map(x=>x.endDateTime).Column(“endDateTime”);
参考资料(x=>x.0)
.列(“BookingID”)
.Not.LazyLoad().Nullable()
.Cascade.All();
}
}

有什么想法吗?

您正在尝试两次映射同一列(
BookingId
):

如果您需要引用字段
BookingId
,您可以使用多对一(
References
BookingId
,这样您的映射将变成:

public class BookingLocationMap : ClassMap<BookingLocation>
{
    public BookingLocationMap()
    {
        Table("Bookings_Locations");

        Id(x => x.Id).Column("ID");
        Map(x => x.locationID).Column("LID");
        Map(x => x.startDateTime).Column("startdatetime");
        Map(x => x.endDateTime).Column("enddatetime");

        References(x => x.Booking)
         .Column("BookingID")
         .Not.LazyLoad().Nullable()
         .Cascade.All();
    }
}

在insertBooking()函数中,对象:booking和bookingLocation是新的临时对象吗?在BookingLocation类(BookingLocation.Booking)中,房产“预订”在哪里?很好。非常感谢!这似乎在我的两个实体(BookingLocation和Booking)之间建立了依赖关系。这正常吗?我觉得我现在应该将一个Booking实例传递到BookingLocations的构造函数中,以便能够访问Booking.bookingID?通常,通过这样的双向关系,我在
Booking
中添加和删除了“自动”的方法设置这些关系,这样您就不必将
Booking
传递到
BookingLocation
的构造函数中,谢谢。我有公共虚拟int bookingID{get{return Booking.bookingID;}set{Booking.bookingID=bookingID;}-现在在BookingLocation中,我无法让它保存与BookingLocation.BookingID相同的值。在BookingLocation.BookingID中,它将继续保存Booking.ID(主键字段)。你知道我能做些什么或者为什么会这样吗?也许您可以举一个这个添加/删除方法的例子,因为我可能完全错误地处理了这个问题。。。