我的多对一映射工作正常,但位置和 location_times 之间的一对多关系总是给我一个错误。
我一直收到这个错误:
在这行代码中:
映射看起来像这样:
位置:
public virtual IList<LocationTimes> LocationTimes { get; set; }
public virtual int locationID { get; set; }
public virtual IList<LocationTimes> LocationTimes { get; set; }
public Location()
{
LocationTimes = new List<LocationTimes>();
}
位置图:
public class LocationMap : ClassMap<Location>
{
public LocationMap()
{
Table("Locations");
Id(x => x.locationID).Column("ID");
HasMany(x => x.LocationTimes)
.Inverse()
.Cascade.All();
位置表:
CREATE TABLE [dbo].[Locations](
[ID] [int] IDENTITY(1,1) NOT NULL
...
CONSTRAINT [PK_Locations_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
位置时间:
public class LocationTimes
{
public virtual int ID { get; set; }
public virtual Location Location { get; set; }
}
位置时间 map :
public class LocationTimesMap : ClassMap<LocationTimes>
{
public LocationTimesMap()
{
Table("Location_Times");
Id(x => x.ID);
References(x => x.Location).Column("LID");
}
}
Location_times 表:
CREATE TABLE [dbo].[Location_Times](
[ID] [int] IDENTITY(1,1) NOT NULL,
[LID] [int] NULL,
[EHStart] [int] NULL,
[EHEnd] [int] NULL,
[EHSell] [money] NULL,
CONSTRAINT [PK_Location_Times_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
完整错误信息:
"{"could not initialize a collection: [WhygoDomain.Location.LocationTimes#4] [SQL: SELECT locationti0_.Location_id as Location4_1_, locationti0_.ID as ID1_, locationti0_.ID as ID1_0_, locationti0_.LID as LID1_0_, locationti0_.EHStart as EHStart1_0_ FROM Location_Times locationti0_ WHERE locationti0_.Location_id=?]"}"
从报错信息中的sql可以看出确实是在找locationti0_.Location_id,我知道这个id是不存在的。不过我不知道它为什么要找那个。
最佳答案
这通常是您的表上 ID 名称不匹配的问题。检查以确保 Location 在表中有一个 ID 列,并且它遵循您的约定或正确映射。您不共享 Location 的 map 、完整对象图或任何表格,因此很难判断 ID 的名称以及它们是否正确匹配。
编辑:
根据RichardD在评论中的回答,修改LocationMap如下:
public class LocationMap : ClassMap<Location>
{
public LocationMap()
{
Table("Locations");
Id(x => x.locationID).Column("ID");
HasMany(x => x.LocationTimes).KeyColumn("LID").Inverse().Cascade.All();
关于c# - NHibernate 错误 - "could not initialize a collection",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006796/