System.InvalidOperationException:只有在上下文使用关系数据库提供程序时才能使用特定于关系的方法

Tau*_*ikh 8 unit-testing entity-framework xunit in-memory-database

System.InvalidOperationException:

只有在上下文使用关系数据库提供程序时才能使用特定于关系的方法。

InMemoryDatabase用于测试用例时出现上述错误?

var msaContextOptions = new DbContextOptionsBuilder<MSA.DAL.MsaDbContext>()
           .UseInMemoryDatabase(databaseName: "Get results")
           .ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning))
           .Options;
Run Code Online (Sandbox Code Playgroud)

Fel*_*lix 35

与提供程序字符串进行比较是脆弱的 - 如果微软在Microsoft.EntityFramework远离Core时更改为 怎么办!

我建议使用

if (!context.Database.IsInMemory())
{
    context.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)

或者

if (context.Database.IsRelational())
{
    context.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)

我们在一个单独的 nuget 包中包含与 EF 相关的代码,该包不包含Microsoft.EntityFrameworkCore.InMemory,因此第一个选项对我们不起作用。


小智 18

正如其他人提到的,我发现跳过 DBMigration 是目前最好的选择。当 Database ProviderName 不是 InMemory 时,我正在运行数据库迁移。

if (context.Database.ProviderName != "Microsoft.EntityFrameworkCore.InMemory")
{
    context.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)