Entity Framework Core нулевой объект один-к-одному - PullRequest
0 голосов
/ 14 сентября 2018

Entity Framework Ядро нулевого объекта. У меня отношения один-к-одному.

public class Player
{
    public int Id { get; set; }

    public int? RatingId { get; set; }

    public Rating Rating { get; set; }
}

public class Rating
{
    public double Mean { get; set; }
}

В моем контроллере плеера я возвращаю

var player = await _context.Player.FindAsync(id);

Однако это мой JSON

{
    "id": 3010,
    "ratingId": 2009,
    "rating": null,
    "displayName": "Conor",
    "partialPlayPercentage": 0.5,
    "partialUpdatePercentage": 1
}

Здесь рейтинг должен быть нулевым?

FTI Когда я звоню

var rating = await _context.Rating.FindAsync(2009);

Я получаю правильный рейтинг

1 Ответ

0 голосов
/ 14 сентября 2018

Здесь рейтинг должен быть нулевым?

Да, за исключением того, что Ленивая загрузка включена, что по умолчанию в EF Core.

Я бы посоветовал вам прочитать всю Загрузка связанных данных Раздел документации EF Core, в котором объясняются 3 поддерживаемых шаблона - Быстрая, Явная и Ленивая загрузка. Обратите внимание, что неявная загрузка отсутствует, поэтому вам нужно использовать один из них, чтобы загрузить свойство навигации.

Например, явная загрузка:

var player = await _context.Player.FindAsync(id);
if (player != null)
    _context.Entry(player).Reference(e => e.Rating).Load();

Стремительная загрузка с Include / ThenInclude является более естественным выбором, но ее нельзя использовать с Find / FindAsync, поэтому вам нужно использовать FirstOrDefault / SingleOrDefault (или их Async аналоги), например:

var player = await _context.Player
    .Include(e => e.Rating)
    .FirstOrDefaultAsync(e => e.Id == id);
...