Nano Hash - криптовалюты, майнинг, программирование

Ошибка NHibernate - не удалось инициализировать коллекцию

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

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: ВЫБРАТЬ locationti0_.Location_id как Location4

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>();
    }
, locationti0_.ID как ID1_, locationti0_.ID как ID1_0_, locationti0_.LID как LID1_0_, locationti0_.EH EHStart1_0_ FROM Location_Times locationti0_ WHERE locationti0_.Location_id =?] "}"

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



Ответы:


1

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

Изменить:

Согласно ответу Ричарда в комментариях, измените 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();
25.01.2012
  • Спасибо за ответ, я перепроверил несколько вещей и предоставил дополнительную информацию выше. Я рад, что вы сказали, что это обычная проблема, от этого мне стало немного легче;) У вас есть еще идеи? 25.01.2012
  • Отредактировал мой ответ с учетом вашей таблицы defs. 25.01.2012
  • Спасибо. Я пробовал предложенные вами изменения, но по-прежнему получаю ту же ошибку. Кажется, что он все еще генерирует Location_id в SQL. Я обновил выше свою последнюю информацию, можете ли вы увидеть другую причину, по которой он это сделал? Так обидно ... 26.01.2012
  • @iKode Попробуйте изменить References(x => x.Location).Column("LID"); на References(x => x.Location, "LID"); 26.01.2012
  • @iKode Думал, может, думаю, на самом деле это другая сторона отношений. Добавьте .KeyColumn('LID') в HasMany в LocationMap вот так - HasMany(x => x.LocationTimes).KeyColumn("LID").Inverse().Cascade.All(); 26.01.2012
  • @RichardD это именно то, что мне нужно. Я очень благодарен за вашу помощь! Большое спасибо!!! 26.01.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..