我一直在寻找一套相当复杂的Dapper代码,这将允许我调用存储过程并使它读取3个游标。但是有一个转折……第一个光标返回一个对象,该对象中有7个映射对象(类内七个一对一的关系)。其他两个游标返回该类包含并存储在对象集合中的多个对象(一对多)。
因此,我可以使用QueryMultipe然后调用Read&ReadSingle来使多个游标正常工作。这将填充基类,而不会填充任何复杂类型,但是会填充该类中的两个列表。
另外,我可以在“ types”参数中调用8种类型的Query(因为可以映射到的类型数量限制超过了进行构造的Func <>提供的7种类型)。
但是...似乎没有ReadSingle方法接受超过7种类型的映射,并且他们对Query所做的相同更改(以允许发送无限类型)没有添加到ReadSingle方法中通过this change在他们的存储库中...或者至少我找不到或无法找到它。
有没有人遇到此限制并且能够绕过它而不必重写存储过程? (重写存储的proc对于该项目是有问题的-关于为什么的长话。)
为澄清起见,我有一个类似下面的类,该类由一个存储过程调用填充-我正在寻找一个针对该存储过程的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
}
答案 0 :(得分:0)
我最终不得不拆分我的SQL存储过程,以在一个过程中返回大量数据,并在另一个过程中返回与之相关的对象列表(一对多)的游标。尽管可以辩称任何数据库中的存储过程都不应一次返回如此复杂的数据集,但Dapper似乎缺乏这种素质。这是我可以落后的论点,尤其是因为我最初并未编写这些过程。 ;)