ASP.NET Core 测试 - 在夹具中初始化 InMemory SQLite dbcontext 时获取 NullReferenceException

Lau*_*son 13 c# sqlite xunit in-memory-database asp.net-core

我有一个测试装置,我在其中初始化了我的 SQLite 内存 dbcontext,如下所示:

public static MYAPPDBContext Create()
{
    var options = new DbContextOptionsBuilder<MYAPPDBContext>()
                    .UseSqlite("DataSource=:memory:")
                    .Options;
    var context = new MYAPPDBContext(options);

    context.Database.OpenConnection(); // this is where exception is thrown
    context.Database.EnsureCreated();

    return context;
}
Run Code Online (Sandbox Code Playgroud)

当我调用 Create() 方法时,我得到以下 NullReferenceException:

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.Data.Sqlite
  StackTrace:
   at Microsoft.Data.Sqlite.SqliteConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.<>c.<OpenConnection>b__15_0(DatabaseFacade database)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, Func`2 verifySucceeded, TState state)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 operation)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.OpenConnection(DatabaseFacade databaseFacade)
   at MYAPPPlus.UnitTests.TestInfrastructure.MYAPPContextFactory.Create() in C:\websites\MYAPPPremier\tests\MYAPPPlus.UnitTests\TestInfrastructure\MYAPPContextFactory.cs:line 26
   at MYAPPPlus.UnitTests.TestInfrastructure.QueryTestFixture..ctor() in C:\websites\MYAPPPremier\tests\MYAPPPlus.UnitTests\TestInfrastructure\QueryTestFixture.cs:line 24
Run Code Online (Sandbox Code Playgroud)

关于可能发生什么的任何想法?

仅供参考:我的代码基于https://garywoodfine.com/entity-framework-core-memory-testing-database/上的博客文章,以及其他资源。此外,当使用基本的 ef 核心内存数据库时,我的装置工作得很好。

Sha*_*han 33

我在尝试为 Sqlite 数据库执行 EF Core 脚手架时遇到了这个问题。问题是我安装了Microsoft.EntityFrameworkCore.Sqlite.Core而不是Microsoft.EntityFrameworkCore.Sqlite.

我卸载了以前的包,并运行了这个命令:

Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 3.1.2
Run Code Online (Sandbox Code Playgroud)

然后一切正常。是的...

  • 我遇到了同样的问题,这对我也有用,非常感谢。有谁知道这两个 nuget 包会发生什么?他们的描述几乎相同... (3认同)

Lau*_*son 6

我的错。当我需要版本 2.2.6 时,我安装了 Microsoft.Data.Sqlite.Core 版本 3.0.0,但我没有安装 Microsoft.Data.Sqlite 2.2.6,我已经安装了它。它现在正在工作。

另外,仅供参考: .UseSqlite("Data Source=:memory:") 和 .UseSqlite("DataSource=:memory:") 都可以工作。