I have an EF query in which I am returning an \'Item\' by it\'s unique identifier. I\'m using the scaffolded controller provided by MVC and this works ok, but now I want it
Followed by @Anthony and @Korayem answer, I recommend to do as below for safer code.
Item item = await db.Items.Include(o => o.Tags).FirstOrDefaultAsync(i => i.Id == id);
if(item == default(Item))
return NotFound();
Find()
and FindAsync()
are methods on type DbSet
(which is what db.Items
is). Include()
returns a DbQuery
object, which is why FindAsync()
is not available. Use SingleOrDefaultAsync()
to do the same thing as FindAsync()
(the difference is it will go straight to the database and won't look in the context to see if the entity exists first)...
Item item = await db.Items.Include("Tags").SingleOrDefaultAsync(i => i.Id == id);