Хобрук: Ваш путь к мастерству в программировании

дочерняя связь недоступна в родительском объекте

У меня есть следующий метод, который возвращает список заводских автомобилей.

Это работает, но порядок неправильный.

CarEngines может иметь идентификатор заказа, и я хочу сделать заказ по нему.

Глядя на другие ответы здесь, я вижу, что вы не можете сделать заказ внутри запроса, и вы должны сделать это позже.

Проблема в том, что я не могу получить доступ к CarEngines, как вы можете видеть ниже:

public async Task<ActionResult<CountryList>> GetCountryCarObject(Guid countryID)
{
    var factoryCars = await _context.CountryList
        .Include(n => n.CarList).ThenInclude(l => l.CarEngines)
        .Include(n => n.CarList).ThenInclude(l => l.CarOptions)
        .SingleOrDefaultAsync(c => c.CountryId == countryID);

    factoryCars.CarList.CarEngines  <== CarEngines doesn't show up in CarList object

    return factoryCars;
}

Это говорит мне, что CarList не содержит определения для CarEngines.

Но это в моей модели CarList, я определил это так:

public CarList()
{
    CarEngines = new HashSet<CarEngines>();
}

public virtual ICollection<CarEngines> CarEngines { get; set; }

Вот две модели:

public partial class CarList
{
    public CarList()
    {
        CarEngines = new HashSet<CarEngines>();
        CarOptions = new HashSet<CarOptions>();
    }

    public string CarId { get; set; }
    public string CarMake { get; set; }
    public string CarModel { get; set; }
    public Guid? CarCountryId { get; set; }

    public virtual ICollection<CarEngines> CarEngines { get; set; }
    public ICollection<CarOptions> CarOptions { get; set; }
}


public partial class CountryList
{
    public CountryList()
    {
        CarList = new HashSet<CarList>();
    }

    [Key]
    public Guid CountryId { get; set; }
    public string CountryName { get; set; }
    public string CountryLocation { get; set; }
    public string CountryDesc { get; set; }

    public virtual ICollection<CarList> CarList { get; set; }

}

Так что я не уверен, что он его не видит.

Есть ли способ заставить это работать?

Спасибо!


  • Вы получаете сообщение об ошибке? Если да, то что это за ошибка? Или это проблема с Intellisense? 07.10.2020
  • Дайте нам код всех классов. CountryList, CarList должно быть достаточно 07.10.2020
  • @NolanBradshaw Я получаю CarList doesn't contain a definition for CarEngines 07.10.2020
  • @NolanBradshaw полная ошибка в Visual Studio: Error CS1061 'ICollection<CarList>' does not contain a definition for 'CarEngines' and no accessible extension method 'CarEngines' accepting a first argument of type 'ICollection<CarList>' could be found 07.10.2020
  • @A_kat, спасибо! я добавил эти 07.10.2020
  • Вносили ли вы какие-либо изменения в базу данных, не делая это через сущность? Эта ошибка часто возникает, когда база данных изменилась, а EF не знает об изменении, поэтому сопоставление неверно. 07.10.2020

Ответы:


1

Хорошо, так что тот факт, что есть что-то под названием CarList, но это не список, очень сбивает с толку, но мы движемся дальше....

Проблема в том, что CarList - это список. Так что используйте что-то вроде factoryCars.CarList.Select( x=>x.CarEngines). Также переименуйте его в var country вместо var factoryCars, так как вы возвращаете одну страну, а не список автомобилей.

Также переименуйте свои переменные и классы, возможно, эта путаница была вызвана этим. Например, вместо ICollection<CarList> CarList вы можете переименовать его в ICollection<Car> Cars, так что прямо сейчас из названия вы можете легко понять, что есть несколько автомобилей (таким образом, это коллекция), которая включает объект Car.

07.10.2020
  • Спасибо, я попробую, часть кода, который вы видите, это то, что .NetCore EF автоматически сгенерировал, когда я создал проект и запустил команду каркаса базы данных .net core. Как вещь HashSet. :) 07.10.2020
  • Буду ли я использовать factoryCars.CarList.Select( x=>x.CarEngines) вместо строки ThenInclude или поместить ее под ней? Спасибо! 07.10.2020
  • Кроме того, вы можете использовать атрибут Table, чтобы безопасно переименовывать классы. 07.10.2020
  • Благодарность! Поэтому я добавил, что... будет ли он упорядочиваться автоматически или мне нужно создать другой объект для упорядочивания? 07.10.2020
  • Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..