为 Dapper 提供一个要映射的类实例,而不是总是实例化一个新实例?
Posted
技术标签:
【中文标题】为 Dapper 提供一个要映射的类实例,而不是总是实例化一个新实例?【英文标题】:Provide Dapper with a class instance to map to instead of always instantiating a new one? 【发布时间】:2015-04-01 21:25:18 【问题描述】:我查看了源代码,但没有找到任何东西(虽然我不擅长 IL),但我想看看是否有办法为 Dapper 提供一个类实例,而不是总是实例化一个新的一个。这样做的原因是我们有时可能会对两个不同的存储过程进行两次单独的调用——一个返回“实体”的某些列,另一个返回其他列。但是,我们没有使用我们在第一次调用中收到的实体进行第二次查询,而是获得了本质上相同实体的两个实例。 Dapper 最好使用现有的实体类并将查询结果映射到现有的类。
有什么方法可以拦截 Dapper 的类实例化,以便在需要时为其提供现有实例?
【问题讨论】:
【参考方案1】:很好的问题。目前,它允许你指定一个特定的构造函数,但它总是new
s:
il.Emit(OpCodes.Newobj, specializedConstructor);
我们可以做的是可以指定构造函数或static
工厂方法;我怀疑这只是对核心实现器代码的三行更改,以及其他一些地方。并非不可能,但随后会涉及 calling-context 之类的问题:dapper 如何为工厂提供调用者指定的上下文。再说一遍:一切皆有可能(protobuf-net 做的几乎一样)。
但今天这些都不存在。这不是不可能的。
【讨论】:
谢谢马克!上下文是一个很好的问题。只是一个快速的想法,但是如何将一个可选的 Func以上是关于为 Dapper 提供一个要映射的类实例,而不是总是实例化一个新实例?的主要内容,如果未能解决你的问题,请参考以下文章