【发布时间】:2019-03-01 19:02:44
【问题描述】:
我一直在寻找一组相当复杂的 Dapper 代码,它允许我调用存储过程并让它读取 3 个游标。但是有一个转折……第一个光标返回一个对象,其中包含 7 个映射对象(类中有七个一对一的关系)。其他两个游标返回类包含并存储在对象集合中的多个对象(一对多)。
所以,我可以使用 QueryMultipe 让多个游标工作,然后调用 Read & ReadSingle。这会填充基类而不填充任何复杂类型,但它确实填充了类中的两个列表。
另外,我可以在“types”参数中调用具有 8 种类型的 Query(因为您可以映射到的类型数量有限制,超过了进行构造的 Func 提供的 7 种)。
但是...似乎没有 ReadSingle 方法可以接受超过 7 种类型的映射,并且他们对 Query 所做的相同更改(允许发送无限类型)没有添加到 ReadSingle 方法通过他们的存储库中的this change...或者至少我找不到或弄明白。
有没有人遇到过这个限制并且能够绕过它而无需重写存储过程? (对于这个项目来说,重写存储过程是有问题的——原因很长。)
为了澄清,我有一个像下面这样的类,它由一个存储过程调用填充 - 我正在寻找一个对这个存储过程的 Dapper 调用来一次填充这个对象:
public class Foo
{
private long simpleTypeA;
private string simpleTypeB;
private Complex1 complexType1; // complexType1 thru 7 get sent in with the 1st cursor as part of joins on tables in the SQL
private Complex2 complexType2;
private Complex3 complexType3;
private Complex4 complexType4;
private Complex5 complexType5;
private Complex6 complexType6;
private Complex7 complexType7;
private List<Complex8> complexType8; // Gets sent in with 2nd cursor
private List<Complex9> complexType9; // Gets sent in with 3rd cursor
// ... property implementation & constructor here
}
【问题讨论】:
-
仅供参考 - 我上面关于 7 类型限制的声明在此处进一步解释:riptutorial.com/dapper/example/1198/mapping-more-than-7-types