我已经通过标准方法将我的日志框架连接到几乎所有contextOptions.UseLoggerFactory(...)数据库代码。然而,有一段代码需要我们通过context.Database.GetDbConnection().CreateCommand()对象运行我们自己的、自定义生成的 SQL。该对象显然没有从该对象继承标准日志记录context。我的 EF 代码的其余部分生成类似Executing DbCommand...或的输出Executed DbCommand (123ms)...的输出。我希望这个自定义命令执行相同的操作(无需自己手动记录该信息。我已经查看了 DbCommand 和 DbConnection 对象,但我不知道如何与此查询的日志记录结合起来。任何想法?
这是我正在查看的代码的要点:
using (var cmd = context.Database.GetDbConnection().CreateCommand()) {
command.CommandTest = "SELECT 1+1"; // not our real query :D
await context.Database.OpenConnectionAsync(token);
using (var reader = await command.ExecuteReaderAsync(System.Data.CommandBehavior.SequentialAccess, token)) {
... other logic...
}
}
Run Code Online (Sandbox Code Playgroud) 我遇到了一种情况,需要非异步运行单个LINQ 查询。原因:目前异步 EF 调用加载大 blob 的方式仍然存在错误(有关实体框架异步操作需要十倍时间才能完成的更多信息)
因此,修复上述错误的选择是将查询转换为自定义 DbCommand 并异步运行原始 SQL,或者我可以将调用ToListAsync从ToList.
TLDR ---问题:
我知道同步调用异步代码可能会导致死锁(例如query.ToListAsync().Result),但是,在异步方法内部调用 ToList 的非异步版本是否会出现相同的问题?