c# - NHibernate 错误 - "could not initialize a collection"

标签 c# nhibernate fluent-nhibernate

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

我一直收到这个错误: enter image description here

在这行代码中: enter image description here

映射看起来像这样:

位置:

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/

相关文章:

nhibernate - 复杂对象的 Fluent NHibernate N+1 问题

c# - 如何针对 Vista 测试应用程序

c# - 如何使用 System.DirectoryServices.AccountManagement 将用户添加到 AD?

c# - 在 LINQ 中表达组查询时遇到问题

c# - 无法使用 Nhibernate 为 SQL Server CE 创建架构

c# - 流畅的 nHibernate - 不是延迟加载

c# - 如何使用数组项的父节点从 JSON 生成 XML

nhibernate - IStatelessSession 与 ISession 包装器

c# - 使用 Nhibernate 时,检查 C# .Net 中的列表相等性不起作用

c# - 如何使用 nHibernate 和 QueryOver API 获得不同的结果?