Sono nuovo nel mondo Async()
di EF e mi chiedevo se ciò fosse possibile. Le mie ricerche su Google non hanno fornito risposte.
Ho due lezioni:
public class User {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class Application {
[Key]
public int Id { get; set; }
public string Description { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public User User { get; set; }
}
Il percorso Details
per l' Application
è il seguente:
public async Task<ActionResult> Details(int? id) {
if (id == null) {
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Application application = await db.Applications.FindAsync(id);
if (application == null) {
return HttpNotFound();
}
return View(application);
}
Il codice sopra per i dettagli restituisce null
per application.User.Name
Ho visto chiamate per ottenere i dati di oggetti estranei come db.Applications.Include(a => a.User)
. Come posso combinare entrambi questi? O forse qualcosa di diverso da .include()
deve essere usato qui.
Grazie.
Find()
e FindAsync()
sono metodi sul tipo DbSet
(che è ciò che db.Items
è). Include()
restituisce un oggetto DbQuery
, motivo per cui FindAsync()
non è disponibile. Usa SingleOrDefaultAsync()
per fare la stessa cosa di FindAsync()
(la differenza è che andrà direttamente al database e non cercherà nel contesto di vedere se l'entità esiste prima) ...
Item item = await db.Items.Include("Tags").SingleOrDefaultAsync(i => i.Id == id);
Seguito da @Anthony e la risposta @Korayem, ti consiglio di fare come sotto per codice più sicuro.
Item item = await db.Items.Include(o => o.Tags).FirstOrDefaultAsync(i => i.Id == id);
if(item == default(Item))
return NotFound();