System.InvalidOperationException:仅当上下文使用关系数据库提供程序

时间:2018-05-23 09:17:00

标签: entity-framework xunit

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

在使用InMemoryDatabase进行测试用例时获取上述错误?

var msaContextOptions = new DbContextOptionsBuilder()                .UseInMemoryDatabase(databaseName:"获得结果")                .ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning))                可供选项;

3 个答案:

答案 0 :(得分:2)

正如其他人所提到的,我发现跳过DBMigration是目前的最佳选择。 当数据库提供者名称不是InMemory时,我正在运行数据库迁移。

if (context.Database.ProviderName != "Microsoft.EntityFrameworkCore.InMemory") { context.Database.Migrate(); }

答案 1 :(得分:1)

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

我会推荐使用

if (!context.Database.IsInMemory())
{
    context.Database.Migrate();
}

if (context.Database.IsRelational())
{
    context.Database.Migrate();
}

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

答案 2 :(得分:-1)

在我们的例子中,@hemant-sakta 的解决方案不起作用。错误的原因是我们在播种时在我们的一个数据库表中设置了自动增量值(我们在迁移期间播种)。

解决方案是在隔离模式下跳过设置自动增量值:

private static void SetAutoIncrementValue(MyContext context)
{
    if (HostingEnvironment.IsEnvironment("Isolated")) return;
    
    // auto increment code
}