C# NHibernate错误-“无法初始化集合”

C# NHibernate错误-“无法初始化集合”,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有多对一映射工作正常,但是位置和位置时间之间的一对多关系一直给我一个错误 我不断地发现这个错误: 在这一行代码中: 映射如下所示: 地点: 地点时间: 地点时间地图: 完整错误消息: {无法初始化集合:[WhygoDomain.Location.LocationTimes4] [SQL:选择locationti0\u.Location\u id作为Location4\u 1\u,locationti0\u.id作为ID1\u,locationti0\u.id作为ID1\u 0\u,loca

我有多对一映射工作正常,但是位置和位置时间之间的一对多关系一直给我一个错误

我不断地发现这个错误:

在这一行代码中:

映射如下所示:

地点:

地点时间:

地点时间地图:

完整错误消息:

{无法初始化集合:[WhygoDomain.Location.LocationTimes4] [SQL:选择locationti0\u.Location\u id作为Location4\u 1\u,locationti0\u.id作为ID1\u,locationti0\u.id作为ID1\u 0\u,locationti0\u.LID作为LID1\u 0\u,locationti0\u.EHStart作为EHStart1\u 0\u 从位置\u乘以位置ti0\u 其中locationti0_u.Location_id=?]}


我可以从错误消息中的sql中看到,它确实在查找locationti0\u0.Location\uID,我知道它不存在。我不知道它为什么要这样做。

这通常是由于您的表上的ID名称不匹配的问题。检查以确保位置在表上有一个ID列,并且它符合您的约定或映射正确。您不共享位置的映射、完整对象图或任何表,因此很难判断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();

只需检查数据库中是否有所有这些列。一个或多个是missing@gdoron谢谢你的建议。我现在已经删除了所有不必要的字段。我可以从错误消息中的sql中看到,它确实在查找locationti0\u0.Location\uID,我知道它不存在。我不知道为什么它会这么想…你是在使用某种约定吗?可能是重复的谢谢你的回答,我已经仔细检查了一些事情,并提供了以上更多信息。我很高兴你说这是一个常见的问题,这让我感觉好多了;你有什么进一步的想法吗?根据你的表defs编辑了我的答案。谢谢。我尝试了您建议的更改,但仍然出现相同的错误。它似乎仍然在SQL中生成位置id。我已经用我的最新版本更新了上面的内容,你能看到它这样做的其他原因吗?如此令人沮丧…@iKode尝试更改Referencesx=>x.Location.ColumnLID;参考x=>x.位置,盖子@我想这可能,认为这实际上是关系的另一面。向HasMany in LocationMap添加.KeyColumn'LID,如下所示-HasManyx=>x.LocationTimes.KeyColumnLID.Inverse.Cascade.All;
 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; }   
}
public class LocationTimesMap : ClassMap<LocationTimes>
{
    public LocationTimesMap()
    {
        Table("Location_Times");

        Id(x => x.ID);
        References(x => x.Location).Column("LID"); 
    }
}
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]
public class LocationMap : ClassMap<Location>
 {
    public LocationMap()
    {
        Table("Locations");
        Id(x => x.locationID).Column("ID");
        HasMany(x => x.LocationTimes).KeyColumn("LID").Inverse().Cascade.All();