Stein The Ruler Ответов: 1

Списки в ядре entity framework не заполняются


Привет!

У меня есть два класса: Item и ItemType.
Item содержит ItemTypeId, а ItemType содержит список элементов.

Но список элементов никогда не заполняется. Его всегда 0.

Предмет:
public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Graphic { get; set; }
    public decimal Price { get; set; }
    public string Description { get; set; }
    public int ItemTypeId { get; set; }
    public virtual ItemType ItemType { get; set; }
}


ItemType:
public class ItemType
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Item> Items { get; set; } = new HashSet<Item>();

    public enum ListTypes
    {
        Student = 1,
        Work = 2,
        Gamer = 3,
        Other = 4
    }
}


и это компонент представления, который выбирает ItemType:
public class ItemListViewComponent : ViewComponent
    {
        private Data.TechDbContext _context;

        public ItemListViewComponent(Data.TechDbContext context)
        {
            _context = context;
        }

        public async Task<IViewComponentResult> InvokeAsync(Models.ItemType.ListTypes type)
        {
            var single = await (from t in _context.ItemTypes where t.Id == (int)type select t).FirstAsync<Models.ItemType>();

            return View(single);
        }
    }


Он находит правильный ItemType, но свойство Items всегда равно 0. (Да, я проверил данные в БД)

Любая помощь в этом будет высоко оценена! (так как это сводит меня с ума)

Что я уже пробовал:

Я пробовал отладку и различные методы выбора данных. Отбросьте базу данных и повторно заполните данные.

Bryian Tan

Определена ли связь между этими двумя таблицами? пример: внешний ключ.

Stein The Ruler

Нет, не что иное, как стандартное соглашение об именовании. ItemTypeId подключается к идентификатору объекта ItemType

Bryian Tan

Хорошо, можете ли вы создать отношения внешнего ключа между ItemType и таблицей Item из базы данных?

Stein The Ruler

это как раз то, чего я пытаюсь избежать. Я просто хочу использовать встроенную функциональность, которая заполняет список на основе идентификатора при выборе из базы данных

Bryian Tan

Хорошо, тогда вам нужно обновить код, чтобы объединить эти две таблицы.

предложение Join (Справочник по c# )[^]

Stein The Ruler

хорошо спасибо я попробую

1 Ответов

Рейтинг:
0

Stein The Ruler

Должно быть, я пропустил часть о загрузке сущностей.

Я добавил метод GetItemType в свой DbContext, который загружает реляционные данные

public async Task<ItemType> GetItemType(ItemType.ListTypes type)
{
    ItemType result = await this.ItemTypes.Include(i => i.Items).SingleAsync(i => i.Id == (int)type);

    return result;
}


Так что теперь я могу отправить тип списка и получить заполненный объект обратно. Отлично!