Entity Framework Core oggetto nullo. Ho una relazione di entità uno-a-uno.
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; }
}
Nel mio controller del giocatore torno
var player = await _context.Player.FindAsync(id);
Comunque questo è il mio json
{
"id": 3010,
"ratingId": 2009,
"rating": null,
"displayName": "Conor",
"partialPlayPercentage": 0.5,
"partialUpdatePercentage": 1
}
La valutazione dovrebbe essere nulla qui?
FTI Quando chiamo
var rating = await _context.Rating.FindAsync(2009);
Ottengo la valutazione corretta
La valutazione dovrebbe essere nulla qui?
Sì, ad eccezione del caricamento pigro abilitato, che in EF Core non è predefinito.
Ti suggerisco di leggere l'intero argomento della documentazione relativa al carico di dati relativi all'EG-core che spiega i 3 modelli supportati: caricamento Eager, Explicit e Lazy. Nota che non c'è caricamento implicito , quindi devi usare uno di questi per caricare la tua proprietà di navigazione.
Ad esempio, il caricamento esplicito:
var player = await _context.Player.FindAsync(id);
if (player != null)
_context.Entry(player).Reference(e => e.Rating).Load();
Il caricamento entusiasta con Include
/ ThenInclude
è una scelta più naturale, ma non può essere utilizzato con Find
/ FindAsync
, quindi è necessario utilizzare FirstOrDefault
/ SingleOrDefault
(o le loro controparti Async
) in questo modo:
var player = await _context.Player
.Include(e => e.Rating)
.FirstOrDefaultAsync(e => e.Id == id);