小编Eve*_*ent的帖子

.NET Core EF - 从自定义 DbCommand 获取日志输出

我已经通过标准方法将我的日志框架连接到几乎所有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)

c# entity-framework-core .net-core

5
推荐指数
0
解决办法
275
查看次数

从异步方法调用 LINQ 查询的 ToList(而不是 ToListAsync)是否存在潜在的死锁?

我遇到了一种情况,需要非异步运行单个LINQ 查询。原因:目前异步 EF 调用加载大 blob 的方式仍然存在错误(有关实体框架异步操作需要十倍时间才能完成的更多信息)

因此,修复上述错误的选择是将查询转换为自定义 DbCommand 并异步运行原始 SQL,或者我可以将调用ToListAsyncToList.

TLDR ---问题: 我知道同步调用异步代码可能会导致死锁(例如query.ToListAsync().Result),但是,在异步方法内部调用 ToList 的非异步版本是否会出现相同的问题?

c# deadlock async-await

2
推荐指数
1
解决办法
1185
查看次数