[英]Have the non-async methods been removed from EntityFrameworkQueryableExtensions?
我正在嘗試用 C#、Xunit 和 Sqlite 編寫一些單元(好的,集成)測試。
鑒於這些只是單元測試,我不打算費心處理異步方法。 但是當我嘗試時:
using Microsoft.EntityFrameworkCore;
using (var dbContext = new TestDbContext(ContextOptions))
{
var parent = dbContext.Parents.FirstOrDefault();
parent.name.ShouldBe("Fred");
}
}
我發現 DbSet 沒有方法“FirstOrDefault() 或可訪問的擴展方法。
當然,如果我添加了一個using System.Linq;
,定義了這樣的方法。
但我擔心 - 如果FirstOrDefault()
在 System.Linq 中實現,而不是在 Microsoft.EntityFrameworkCore 中,這是否意味着將檢索所有記錄,然后在內存中提取第一條記錄?
這與程序員的期望相去甚遠。
那么問題來了,非異步方法去哪兒了? FirstOrDefaultAsync()
位於public static class EntityFrameworkQueryableExtensions
,但其中沒有非異步方法。
是否刪除了異步方法?
或者他們在不同的程序集中?
命名空間System.Linq
具有擴展名Queryable.FirstOrDefault
。 此擴展構建表達式樹,其中包括FirstOrDefault
方法調用。 表達式樹被傳遞給IQueryable.Provider.Execute
方法,然后IQueryProvider
生成 SQL 並提供所有需要的映射。
這是標准行為,每個 LINQ 提供程序都使用這種技術。 例外是標准中未包含的async
版本,EF Core 必須創建自己的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.