为 Dapper 提供一个类实例来映射到而不是总是实例化一个新的实例?

Amb*_*ite 5 .net c# orm dapper

我已经查看了源代码,但没有找到任何东西(尽管我不擅长 IL),但是我想看看是否有一种方法可以为 Dapper 提供一个类实例,而不是总是实例化一个新的实例。这样做的原因是我们有时可能会对两个不同的存储过程进行两次单独的调用——一个返回“实体”的一些列,另一个返回其他列。然而,第二次查询不是使用我们在第一次调用中收到的实体,而是获得本质上相同实体的两个实例。Dapper 最好使用现有的实体类并将查询结果映射到该现有类。

有没有办法拦截 Dapper 的类实例化,以便在需要时为其提供现有实例?

Mar*_*ell 1

很好的问题。目前,它允许您指示特定的构造函数,但它始终new是:

 il.Emit(OpCodes.Newobj, specializedConstructor);
Run Code Online (Sandbox Code Playgroud)

我们可以做的是使指定构造函数或static工厂方法成为可能;我怀疑这只是对核心物化器代码的三行更改,以及其他一些地方。并非不可能,但接下来会遇到诸如Calling-Context之类的问题:dapper 如何向工厂提供调用者指定的上下文。再说一遍:一切皆有可能(protobuf-net 做了几乎相同的事情)。

但今天这些都不存在了。这并非不可能。