我正在使用SQLite数据库文件来测试我的EF Core应用程序,而不是SQL Server数据库。我遇到了一个问题,因为依赖注入正在传递带有新连接的dbContext的新示例,所以当它试图做某些事情时,例如当创建实体然后试图发送电子邮件时,我会得到一个异常。
事务对象与此命令所关联的连接对象不同。
如何设置我的Startup.cs
,使其只传递一个连接?ConfigureServices()
:
if (_env.IsDevelopment())
{
services.AddDbContext<DbContext, InventoryDbContext>(options =>
options.UseSqlite(sqliteConnectionString, o => o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery))
.AddInterceptors(new QueueSaveChangesInterceptor(), new QueueDbTransactionInterceptor()));
}
else
{
// ...
}
Configure()
:
if (env.IsDevelopment())
{
using var scope = app.ApplicationServices.CreateScope();
Application.SetupContext(scope.ServiceProvider);
using var context = scope.ServiceProvider.GetRequiredService<InventoryDbContext>();
context.Database.EnsureDeletedAsync().Wait();
context.Database.EnsureCreatedAsync().Wait();
SqliteDbSeeder.SeedTestDatabase(context);
}
我是不是该换个方向思考?
2条答案
按热度按时间41zrol4v1#
我解决了我的问题(大部分)。代码不工作还有另一个原因,它与我使用数据库上下文播种数据库的方式有关。这个问题不会阻止我的测试运行和通过,所以我现在将它放在这里,以后可能会回来。
vhmi4jdf2#
警告:通常
DbConnection
实现aren't thread safe。我不建议这么做。您可以在
UseSqlite
中指定唯一的SqliteConnexion
,如下所示:您也可以将连接作为服务注入,如: