簡體   English   中英

是否從 EntityFrameworkQueryableExtensions 中刪除了非異步方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM