ASP .NET Core 2 свойство навигации

93
05 января 2021, 21:50

Создал два класса со связью один к одному

public class Example
{ 
    // id и т.д.
    [ForeignKey("CategoryFacetItem")]
    [Display(Name = "Категория")]
    public int? CategoryId { get; set; }
    public virtual FacetItem CategoryFacetItem{ get; set; }
}
public class FacetItem
{
    public int Id { get; set; }
    public int FacetId { get; set; }
    public Facet Facet { get; set; }
    public string Name { get; set; }
}

При создании миграции Add-Migration и генерации базы данных Update-Database все работает хорошо, внешний ключ добавляется корректно.

Но при попытке перейти по связи CategoryFacetItem.Name ничего нет, CategoryFacetItem - null

В контроллере использую Bind

public async Task<IActionResult> Create([Bind("CategoryId,CategoryFacetItem")] Parcel parcel)
Answer 1

Предположительно проблема в том, что свойство CategoryFacetItem в модели является навигационным свойством Entity Framework. Оно будет содержать null, до тех пор, пока вы явно не укажете при выборке сущности Example из БД, что данный связанный объект необходимо загрузить. В вашем методе, который получает сущности Example из базы, нужно сделать примерно следущее:

 var examples = _context.Examples
        .Include(example => example.CategoryFacetItem)
        .ToList();

Также, начиная с версии EF Core 2.1 доступна "ленивая загрузка" связанных данных - EF загрузит значение свойства при первом обращении к нему. Пример включения ленивой загрузки приведен в этом сообщении https://stackoverflow.com/a/52027987/4624763 . Надеюсь, это поможет.

READ ALSO
Клонирование коллекций ICollection&lt;Element&gt;

Клонирование коллекций ICollection<Element>

Необходимо клонировать коллекцию так, чтобы все её объекты Element так же отвязались от исходной коллекцииПодскажите, как лучше всего это сделать?

134
Закрытие окна через usercontrol

Закрытие окна через usercontrol

Собственно вопросБыли мысли сделать подобное через relative source, но как это передать в код - не знаю

89
Интеграция ASP.NET Core и MySQL

Интеграция ASP.NET Core и MySQL

Друзья, возможно кто-нибудь интегрировал ASPNET Core сервер и БД MySQL

106