相关疑难解决方法(0)

MultipleActiveResultSets =真或多个连接?

我有一些C#,其中我在connection(ExecuteReader)上创建一个阅读器,然后对于该阅读器中的每一行,执行另一个命令(with ExecuteNonQuery).在这种情况下,我MultipleActiveResultSets=True在连接上使用或使用多个连接更好吗?

.net c# sql-server ado.net sql-server-2005

75
推荐指数
2
解决办法
6万
查看次数

如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?

我正在使用 EF Core 5.0 并有以下代码:

public async IAsyncEnumerable<Item> GetItems([EnumeratorCancellation] CancellationToken cancellationToken = default)
{
    await using var ctx = _DbContextFunc();
    //Isolationlevel is required to not cause any issues with parallel working on already read items
    await ctx.Database.BeginTransactionAsync(IsolationLevel.ReadUncommitted, cancellationToken).ConfigureAwait(false);
    await foreach (var item in ctx.Item.
        .AsSplitQuery()
        .Include(i => i.ItemDetail1)
        .Include(i => i.ItemDetail2)
        .OrderByDescending(i => i.ItemId)
        .AsNoTracking()
        .AsAsyncEnumerable()
        .WithCancellation(cancellationToken))
    {
        yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作,允许我在仍在加载更多数据的同时填充数据网格。如果我取消提供的 CancelationToken,首先我会在 MoveNextAsync() 行上收到预期的 TaskCanceledException。

但是:我可以在 SQL Profiler 中看到 SQL 查询本身不会中止,而是始终运行,直到加载所有数据,然后我才能在同一行上收到第二个 TaskCanceledException。

如何中止查询本身?

更新

我将 AsSplitQuery() 添加到示例中,因为事实证明它是我所经历的行为的原因(正如 …

c# entity-framework-core

6
推荐指数
1
解决办法
1460
查看次数