EntityFramework Core 6 升级无法加载类型 IAsyncQueryProvider

EntityFramework Core 6 upgrade Could not load type IAsyncQueryProvider

我已将我的 .NET Core 3.1 应用程序更新到 .NET 6,一步是将 EntityFramwork Core 更新到版本 6.0.2。

不幸的是,我的许多单元测试现在都失败了,例外情况是:

System.TypeLoadException: Could not load type 'Microsoft.EntityFrameworkCore.Query.Internal.IAsyncQueryProvider' from assembly 'Microsoft.EntityFrameworkCore, Version=6.0.2.0,

我不太确定为什么会这样。我已经阅读了迁移指南 (https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-60?view=aspnetcore-6.0&tabs=visual-studio),但没有看到任何类似的内容。

下面是单元测试失败并出现此异常的一个示例:

[TestMethod]
public async Task IsPrivatKundeAsync_WithMatchingCriteria_ReturnsTrue()
{
    var data = new[] {
        new MyEntity { Partnernr = "1", Geburtstag = new DateTime(2000, 1, 1), Plz = "8000" },
        new MyEntity { Partnernr = "2", Geburtstag = new DateTime(2001, 2, 2), Plz = "8001" },
        new MyEntity { Partnernr = "3", Geburtstag = new DateTime(2002, 3, 3), Plz = "8002" },
    };

    var builder = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString());
    var db = new Mock<MyDbContext>(builder.Options);
    db.Setup(x => x.MyEntity).Returns(data.AsQueryable().BuildMockDbSet().Object);

    IPartner partner = new Partner(db.Object);
    var result = await partner.IsPrivatKundeAsync(data[1].Partnernr, data[1].Geburtstag.Value, data[1].Plz);

    Assert.IsTrue(result);
}

这些测试在更新前一直有效。

感谢您的任何见解:-)

问题很可能出在您用于测试的其中一个软件包中。

EF Core 将此 class 的命名空间从 Microsoft.EntityFrameworkCore.Query.Internal.IAsyncQueryProvider 更改为 Microsoft.EntityFrameworkCore.Query.IAsyncQueryProvider 在 ef 核心版本 3 到 5 之间,这意味着其中一个测试包需要更新或更改。在我的例子中是 MockQueryable.Moq 包。