我有一個EF查詢,其中我通過它的唯一標識符返回'Item'。我使用的是由MVC提供的腳手架控制器,這個工作正常,但現在我希望它返回屬於該項目的標籤列表。使用包含異步等待
我想我可以使用'Include'來獲取標籤。但是,在使用異步時,這似乎不被允許。
Item item = await db.Items.Include("Tags").FindAsync(id);
任何人都可以解釋爲什麼這不起作用,並建議一種替代方法來取回物品的標籤嗎?
乾杯
本
我有一個EF查詢,其中我通過它的唯一標識符返回'Item'。我使用的是由MVC提供的腳手架控制器,這個工作正常,但現在我希望它返回屬於該項目的標籤列表。使用包含異步等待
我想我可以使用'Include'來獲取標籤。但是,在使用異步時,這似乎不被允許。
Item item = await db.Items.Include("Tags").FindAsync(id);
任何人都可以解釋爲什麼這不起作用,並建議一種替代方法來取回物品的標籤嗎?
乾杯
本
Find()
和FindAsync()
上DbSet
類型(這是什麼db.Items
是)的方法。 Include()
返回DbQuery
對象,這就是爲什麼FindAsync()
不可用。使用SingleOrDefaultAsync()
做同樣的事情FindAsync()
(所不同的是它會直接進入數據庫,並不會在背景下看看,如果在實體存在第一)...
Item item = await db.Items.Include("Tags").SingleOrDefaultAsync(i => i.Id == id);
非常感謝。清晰簡潔的答案。大! –
注意Single()與First()之間的性能差異,其中前者查找找到記錄,然後繼續查看是否存在另一個存在,而後者在按下記錄時返回 – Korayem
其次@Anthony和@Korayem的回答,我建議按照下面的方法做更安全的代碼。
Item item = await db.Items.Include(o => o.Tags).FirstOrDefaultAsync(i => i.Id == id);
if(item == default(Item))
return NotFound();
http://msdn.microsoft.com/en-us/data/jj819165.aspx –