Ошибка NHibernate - «не удалось инициализировать коллекцию» - PullRequest
4 голосов
/ 25 января 2012

У меня хорошо работают сопоставления многие-к-одному, но связь один-ко-многим между местоположениями и 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]

LocationTimes:

public class LocationTimes
{
    public virtual int ID { get; set; }
    public virtual Location Location { get; set; }   
}

LocationTimesMap:

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]

Полное сообщение об ошибке:

"{" не удалось инициализировать коллекцию: [WhygoDomain.Location.LocationTimes # 4] [SQL: SELECT locationti0_.Location_id as Location4_1_,locationti0_.ID как ID1_, locationti0_.ID как ID1_0_, locationti0_.LID как LID1_0_, locationti0_.EHЗапускать как EHStart1_0_ FROM Location_Times locationti0_ ГДЕ locationti0_.Location_id =?] "}"

см. из 1010 * из 10 * * смsql в сообщении об ошибке, что он действительно ищет locationti0_.Location_id, которого я знаю, не существует.Я не знаю, почему он ищет это.

1 Ответ

6 голосов
/ 25 января 2012

Обычно это проблема несовпадения имен идентификаторов в ваших таблицах. Убедитесь, что в местоположении есть столбец идентификатора в таблице и что он соответствует вашему соглашению или отображается правильно. Вы не публикуете карту местоположения, полный граф объектов или какие-либо из таблиц, поэтому сложно определить, как называются идентификаторы и правильно ли они совпадают.

Edit:

Согласно ответу Ричардда в комментариях, измените 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...