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

问题描述 投票:1回答:2

我有一个测试装置,在其中初始化我的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;
}

当我调用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

关于可能发生的事情有什么想法吗?

FYI:我的代码基于https://garywoodfine.com/entity-framework-core-memory-testing-database/上的博客文章以及其他资源。同样,当使用基本的ef核心内存数据库时,我的夹具也可以正常工作。

c# sqlite asp.net-core xunit in-memory-database
2个回答
1
投票

好像在文章中有错字。

DataSource别名在这里不起作用,您必须使用"Data Source=:memory:"(带空格)


0
投票

我不好。当我需要版本2.2.6时,我已经安装了Microsoft.Data.Sqlite.Core版本3.0.0,而我还没有安装Microsoft.Data.Sqlite.2.6.2。现在正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.