Dapper - несколько карт и несколько возвращенных курсоров - PullRequest
0 голосов
/ 01 марта 2019

Я занимался поиском довольно сложного набора кода Dapper, который позволил бы мне вызывать хранимую процедуру и читать 3 курсора.Но есть изюминка ... первый курсор возвращает один объект, который содержит 7 сопоставленных объектов (семь отношений один-к-одному внутри класса).Два других курсора возвращают несколько объектов (один ко многим), которые класс содержит и хранит в коллекции объектов.

Итак, я могу заставить работать несколько курсоров, используя QueryMultipe, а затем вызывать Read & ReadSingle.Это заполняет базовый класс без заполнения каких-либо сложных типов, но заполняет два списка в классе.

Отдельно я могу вызывать Query с 8 типами в параметре «types» (поскольку существует ограничение на количество типов, которые вы можете сопоставить, которое превышает 7, предоставляемое Func <>, который выполняет конструкцию),

Но ... кажется, что нет метода ReadSingle, который принимает более 7 типов для сопоставления, и такое же изменение, которое они внесли в Query (чтобы разрешить отправку неограниченного количества типов), не было добавлено вметод ReadSingle через это изменение в их хранилище ... или, по крайней мере, я не могу его найти или выяснить.

Кто-нибудь сталкивался с этим ограничением и смог его обойти, не переписывая хранимую процедуру?(Перезапись хранимого процесса проблематична для этого проекта - длинный рассказ о том, почему.)

Чтобы уточнить, у меня есть класс, подобный приведенному ниже, который заполняется одним вызовом хранимой процедуры - я ищуСильный вызов этой хранимой процедуры для одновременного заполнения этого объекта:

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
}

1 Ответ

0 голосов
/ 28 марта 2019

В итоге мне пришлось разделить свои хранимые процедуры SQL, чтобы вернуть большую часть данных в одной процедуре, и курсоры для списка объектов (от одного до многих), связанных в другой процедуре.Кажется, что в Dapper этого качества не хватает, хотя можно утверждать, что хранимые процедуры в любой базе данных не должны возвращать такой сложный набор данных одновременно.Это аргумент, который я могу получить, тем более что изначально я не писал эти процедуры.;)

...