C# 调用简洁的查询<;t>;有时撞车

C# 调用简洁的查询<;t>;有时撞车,c#,.net-core,dapper,C#,.net Core,Dapper,我遇到了一个衣冠楚楚的问题。在打电话的时候 var item2_2 = connection.Query<ItemSmall2>("SELECT FA.ID as id, 3 as RelAgID, IIf(RelTpFak = 2, 26, RelTpFak) as Type FROM FA WHERE FA.Cislo = 1", null, null, true, null, CommandType.Text); 连接的使用是: using (var c

我遇到了一个衣冠楚楚的问题。在打电话的时候

var item2_2 = connection.Query<ItemSmall2>("SELECT FA.ID as id,  3 as RelAgID, IIf(RelTpFak = 2, 26, RelTpFak) as Type FROM FA WHERE FA.Cislo = 1", null, null, true, null, CommandType.Text);
连接的使用是:

using (var connection = CommonExtensions.GetExternalDatabaseConnection())
{
    var item2_2 = connection.Query<ItemSmall2>("SELECT FA.ID as id,  3 as RelAgID, IIf(RelTpFak = 2, 26, RelTpFak) as Type FROM FA WHERE FA.Cislo = 1", null, null, true, null, CommandType.Text);
}
使用(var connection=CommonExtensions.GetExternalDatabaseConnection())
{
var item2_2=connection.Query(“选择FA.ID作为ID,3作为RelAgID,IIf(RelTpFak=2,26,RelTpFak)作为FA的类型,其中FA.Cislo=1”,null,null,true,null,CommandType.Text);
}
如果select查询中没有IIf,也会发生这种情况

编辑:
是的,这是由于异步执行方法造成的,崩溃是因为测试继续执行并完成。

崩溃实际上是测试完成,因为查询是在异步方法中执行的,没有等待。

您可以编辑问题并提供异常详细信息+堆栈跟踪吗?错误是否抱怨连接失败也许是被处置了?无论如何,服务注册似乎与问题无关-连接是由
CreateInMemoryDatabase
单独创建的。该连接在查询后被释放,这意味着下次运行此代码时将抛出异常。我怀疑此查询运行的唯一原因是意外-如果创建了新的DbContext,
CreateInMemoryDatabase
将创建一个新连接,只要
DbContext
保持活动状态,就可以使用该连接。一旦执行退出
using()
块,连接将被释放,直到再次调用
Create
才能使用。修复此问题时,请不要尝试存储连接。根本不要创建它,让EF Core管理它的生命周期。如果您想使用DbContext的连接,请将您的查询添加为DbContext的方法。谢谢大家的宝贵意见。我一定会用你的方法。然而,在我的车里,我意识到这可能是因为包含查询的方法是异步调用的,所以测试实际上将继续并在代码运行到最后之前完成。
private static SqliteConnection _connection;

internal static SqliteConnection GetExternalDatabaseConnection()
{
    return _connection;
}

internal static DbConnection CreateInMemoryDatabase()
{
    _connection = new SqliteConnection("Filename=:memory:");
    _connection.DefaultTimeout = 60000;
    _connection.Open();

    return (DbConnection)_connection;
}
using (var connection = CommonExtensions.GetExternalDatabaseConnection())
{
    var item2_2 = connection.Query<ItemSmall2>("SELECT FA.ID as id,  3 as RelAgID, IIf(RelTpFak = 2, 26, RelTpFak) as Type FROM FA WHERE FA.Cislo = 1", null, null, true, null, CommandType.Text);
}