.ToListAsync
viene utilizzato per ottenere una raccolta di elementi da DB in EF Core. Questo è chiaro Ma qual è il modo giusto per ottenere un singolo oggetto? In modo asincrono se possibile.
public async static Task<Source> LoadEntityAsync(int sourceID)
{
using (var db = new RPDBContext())
{
var sources =
await
db.Source
.Where(x => x.SourceID == sourceID)
.ToListAsync();
// TODO that's like a hack:
return sources.First();
}
}
È necessario utilizzare SingleOrDefaultAsync
se si desidera che l'oggetto sia univoco. Se si sa che l'oggetto è univoco dalle restrizioni del dominio o se si accede a esso tramite la chiave primaria, è possibile utilizzare FirstOrDefaultAsync
.
var sources = await db.Source
.Where(x => x.SourceID == sourceID)
.SingleOrDefaultAsync();
puoi usare un altro sovraccarico e abbreviare la query
var sources = await db.Source
.SingleOrDefaultAsync(x => x.SourceID == sourceID);
le stesse regole si applicano a FirstOrDefaultAsync
.
Se si desidera assicurarsi che l'oggetto esista, rimuovere la parte OrDefault
e utilizzare SingleAsync
e FirstAsync
.
Se è necessario recuperare un singolo elemento, utilizzare FirstOrDefaultAsync
:
public static Task<Source> LoadEntityAsync(int sourceID)
{
using (var db = new RPDBContext())
{
return db.Source.FirstOrDefaultAsync(x => x.SourceID == sourceID);
}
}