EF Core DbDataReader 结果在拦截器中发生变化

EF Core DbDataReader result changing in interceptor

伙计们。

我有一个关于 EF Core DbCommandInterceptor 的问题。

让我们有一个 class 有 2 个像这样的字段

public class User
{
    public Guid Id { get; set; }
    public string SameData { get; set; }
}

public class TestClass
{
   public Guid Id { get; set; }

   public Guid TestClassId { get; set; }
   
   [NotMapperd, MyAttr]
   public TestClass TestClass { get; set; }
}

其中 UserTestClass 都位于不同的上下文中(例如,UserDbContextTestDbContext)。 MyAttr是标记属性,仅此而已。

所以,我想编写一个拦截器,每次我们尝试获取有关 TestClasses 的信息时都会出现,但在获取数据后,它应该获取有关 User 的附加数据,并向 UserDbContext 发出交叉请求(有可能,因为在命令执行后我有 User Id 并且可以在请求中使用这个 Id)

我知道,在这种情况下应该是 DbCommandInterceptor.ReaderExecutedDbCommandInterceptor.ReaderExecutedAsync,但我不明白如何在结果中获取有关对象的信息(我可以获取行,但我不明白是什么我应该怎么做,我应该如何映射它)。如果需要,我可以在项目中使用其他库(如 Dapper 和其他库)。

谁能帮我搞定

  1. 结果类型 - 具体实体类型或实体集合类型?
  2. 结果作为 C# 对象(PO​​CO 或 POCO 集合)?

谢谢。

I know, that it should be DbCommandInterceptor.ReaderExecuted or DbCommandInterceptor.ReaderExecutedAsync in this case, but I cannot understand how to get information about objects in the result

EF 命令拦截器不支持。您可以用不同的 DataReader 替换它。但是生成的查询是为了填充一个特定的对象图,拦截器没有公开它API。