Как сделать связанный объект в шаблоне Razor - PullRequest
0 голосов
/ 07 июня 2018

Используя ASP.NET Core 2.0, Entity Framework Core и Visual Studio, я пытаюсь использовать цикл @foreach в представлении бритвы, чтобы отобразить список «SecondEntityList» в модели Entity1.Мне удалось использовать Entity Framework Core для сохранения данных в локальной БД SQL Server с использованием другого метода представления и действия.Данные были сохранены как в таблицах dbo.Entity1, так и в таблицах dbo.Entity2.

При просмотре бритвы для просмотра списка связанных объектов возвращается следующая ошибка:

NullReferenceException: Object reference not set to an instance of an object.

Как может @Цикл foreach используется для отображения «SecondEntityList» в Entity1?

Entity 1

using System.Collections.Generic;

namespace Project.Models
{
    public class Entity1
    {
        public int Entity1Id { get; set; }
        public List<Entity2> SecondEntityList { get; set; }
    }
}

Entity 2

namespace Project.Models
{
    public class Entity2
    {
        public int Entity2Id { get; set; }
        public string Text { get; set; }

        public int Entity1Id { get; set; }
        public Entity1 Entity1 { get; set; }
    }
}

Просмотр модели

using System.Collections.Generic;
namespace Project.Models.ViewModels
{
    public class MyViewModel
    {
        public Entity1 Entity1 = new Entity1();
        public IEnumerable<Project.Models.Entity2> Entity2List;
    }
}

Метод действия

[HttpGet]
public IActionResult MyListView(long key, MyViewModel mvm)
{
    mvm.Entity1 = context.Entity1.Single(i => i.Entity1Id == key);
    mvm.Entity2List = mvm.Entity1.SecondEntityList;
    return View(mvm);
}

Просмотр бритвы

@model Sediment.Models.ViewModels.MyViewModel;
@foreach (Project.Models.Entity2 i in Model.Entity2List)
{
    @i.Text
}

1 Ответ

0 голосов
/ 07 июня 2018

Использование моделей сущностей в ваших представлениях является плохой практикой по ряду причин. - это , однако, способ выполнить то, что вы просите, используя .Include(...) в своем запросе.

mvm.Entity1 =
    context.Entity1
        .Include(i => i.SecondEntityList)
        .Single(i => i.Entity1Id == key);

Если это серьезный проект, и вы ожидаете сохранить егоВ течение некоторого времени я настоятельно рекомендую вам отделить ваши взгляды от базы данных.В противном случае вы можете попытаться выполнить запрос в своем представлении бритвы после удаления контекста БД.Среди множества других ошибок, с которыми вы можете столкнуться.

...