J'ai un appareil de test dans lequel j'initialise mon dbcontext SQLite en mémoire, illustré ci-dessous:
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;
}
Lorsque j'appelle la méthode Create (), j'obtiens l'exception NullReferenceException suivante:
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
Des idées sur ce qui pourrait se passer?
Pour info: je fonde mon code sur le billet de blog à https://garywoodfine.com/entity-framework-core-memory-testing-database/ , entre autres ressources. En outre, mon appareil fonctionne très bien lors de l'utilisation de la base de données inmemory de base ef core.
J'ai rencontré un problème similaire lors de l'ouverture de Microsoft.Data.Sqlite.SqliteConnection
, il jetait System.NullReferenceException
ainsi que. La classe qui initialisait la connexion était en référence au projet de bibliothèque:
Microsoft.Data.Sqlite
- v3.1.2Microsoft.Data.Sqlite.Core
- v3.1.2Dans ce cas, l'exécutable était le test NUnit
, situé dans le projet de test. Le projet de test n'avait pas de packages NuGet Sqlite
référencés, mais il contenait une référence de projet à la bibliothèque contenant la logique de la base de données. Lors de la construction du projet de test, certaines DLL Sqlite
ont été copiées dans le répertoire bin
, mais pas toutes, ce qui s'est finalement avéré être un problème. L'ajout d'une référence aux deux packages NuGet Sqlite
dans le projet de test a résolu le problème.
On dirait qu'il y avait une faute de frappe dans l'article.
L'alias DataSource
ne fonctionne pas ici, vous devez utiliser "Data Source=:memory:"
(avec un espace)
var options = new DbContextOptionsBuilder<MYAPPDBContext>()
.UseSqlite("Data Source=:memory:") //<-- Note the space
.Options;
Référence Configuration d'un DbContext