在我的ASP.NET MVC網站中,用戶瀏覽書籍。他們可以選擇添加他們自己創建的列表中的每本書。外部DbContext調用期間EF DbContext的內部調用異步行爲ASP.NET MVC
當用戶瀏覽一本書時,每本書下面的所有列表都有一個下拉列表,他可以選擇添加書籍。迄今爲止所有的都很好,但是我現在想要的是,如果該書已經包含在用戶列表中的一個列表中,則該下拉列表應該知道。
這是相關視圖模型:
public class UserBookListsMinimalVM {
public int ListId { get; set; }
public string ListName { get; set; }
public bool BookAlreadyInList { get; set; }
}
這是我跑檢索項查詢:
var userBookLists = await context.vwUserBookLists
.Where(x => x.ListOwner == userName)
.Select(x => new UserBookListsMinimalVM
{
ListId = x.ListId,
ListName = x.ListName,
BookAlreadyInList = context.List_Books.Any(y => y.ListId == x.ListId && y.BookId == bookId)
})
.OrderBy(x => x.ListName)
.ToListAsync();
vwUserBookLists
是包含列表相關的信息和List_Book
一個觀點是中介列表和書籍之間的表格(包含每個列表的書籍等)。
由EF生成的SQL嵌套SELECT
語句,主要是爲了解釋BookAlreadyInList
屬性。 (我不知道查詢是否可以簡化的,我願意接受建議)
的BookAlreadyInList
分配「破發」的全功能的異步過程中不調用context
,看它是不是await
版?
您是否觀察到此代碼出現任何意外行爲?有什麼不工作?我不清楚你究竟在問什麼。對'.Any()'的調用不需要等待,因爲它不是異步的。 – David
嗨@大衛 - 它工作正常(即它返回預期的結果)。我的問題是在'BookAlreadyInList'分配期間對'context'的非異步調用是否與外部'await context'異步調用衝突'。應該.Any()成爲'.AnyAsync()'? – globetrotter
我不認爲有'.AnyAsync()'(儘管你可以很快測試)。實際上並不需要,因爲'.Any()'實際上並未實現數據源中的任何內容。它被轉換爲支持數據存儲的表達式樹,就像其他更多的LINQ方法一樣。只有實際物化數據的方法(比如'.ToList()')需要異步版本。 – David