The code I have got so far works fine
public async Task<ActionResult> Details(Guid? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } ItemDetailModel model = new ItemDetailModel(); model.Item = await db.Items.FindAsync(id); if (model.Item == null) { return HttpNotFound(); } return View(model); }
But I want to include 1 table more and cannot use FindAsync
public async Task<ActionResult> Details(Guid? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } ItemDetailModel model = new ItemDetailModel(); model.Item = await db.Items.Include(i=>i.ItemVerifications).FindAsync(id); if (model.Item == null) { return HttpNotFound(); } return View(model); }
So I am facing this error
Severity Code Description Project File Line Suppression State Error CS1061 'IQueryable' does not contain a definition for 'FindAsync' and no extension method 'FindAsync' accepting a first argument of type 'IQueryable' could be found (are you missing a using directive or an assembly reference?)
Any clue how to fix it?
The simplest is to use FirstOrDefaultAsync
or SingleOrDefaultAsync
instead:
model.Item = await db.Items.Include(i => i.ItemVerifications) .FirstOrDefaultAsync(i => i.Id == id.Value);
The reason you are getting the error is because Find
/ FindAsync
methods are defined for DbSet<T>
, but the result of Include
is IQueryable<T>
.
Another way is to combine FindAsync
with explicit loading:
model.Item = await db.Items.FindAsync(id); if (model.Item == null) { return HttpNotFound(); } await db.Entry(model.Item).Collection(i => i.ItemVerifications).LoadAsync();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With