尝试使用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(主键字段)。你知道我能做些什么或者为什么会这样吗?也许您可以举一个这个添加/删除方法的例子,因为我可能完全错误地处理了这个问题。。。