Использование Dapper с несколькими внутренними объединениями - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь использовать Dapper со следующей строкой sql, но не могу заставить ее работать:

string groupsStringDetailed = "SELECT SUSERGROUP.NAME, SUSERGROUP.DESCRIPTION, SPROGRAMS.PROGRAMNAME, SOBJECTS.NAME FROM ((SIDE.SADMIT SADMIT " +
        "INNER JOIN SIDE.SOBJECTS SOBJECTS ON (SADMIT.PROGRAMID=SOBJECTS.PROGRAMID) AND (SADMIT.OBJECTID=SOBJECTS.ID)) " +
        "INNER JOIN SIDE.SUSERGROUP SUSERGROUP ON SADMIT.GROUPID=SUSERGROUP.GROUPID) " +
        "INNER JOIN SIDE.SPROGRAMS SPROGRAMS ON SOBJECTS.PROGRAMID=SPROGRAMS.ID " +
        "WHERE SUSERGROUP.NAME NOT LIKE '%REPORT' ORDER BY SUSERGROUP.NAME, SPROGRAMS.PROGRAMNAME";

У меня есть следующие классы моделей:

public class SAdmit
{
    public int GROUPID { get; set; }
    public int OBJECTID { get; set; }
    public int PROGRAMID { get; set; }

}

public class SObjects
{
    public int ID { get; set; }
    public int PROGRAMID { get; set; }
    public string NAME { get; set; }

}

public class SPrograms
{
    public int ID { get; set; }
    public string PROGRAMNAME { get; set; }
}

public class SUserGroup
{
    public int GROUPID { get; set; }
    public string NAME { get; set; }
    public string DESCRIPTION { get; set; }
    public int VWLISTDEPTH { get; set; }
    public int WDNBDAYHISTORY { get; set; }
    public string RPDIRECTORY { get; set; }
    public string SENDEREMAIL { get; set; }
    public int CONNECTION_TIMEOUT { get; set; }
    public int APPROVALSTATUS { get; set; }
}

Я создаюпользовательский групповой класс, надеющийся упростить сопоставление этих моделей:

public class CustomSGroup
{
    public SUserGroup Group { get; set; }
    public SPrograms Programs { get; set; }
    public SObjects Objects { get; set; }

}

Я пытаюсь использовать Dapper для получения желаемых результатов, например:

                var output = await cnn.QueryAsync<CustomSGroup, SAdmit, SObjects, SPrograms, CustomSGroup>(groupsStringDetailed, (g, a, o, p) =>
                {
                    a.PROGRAMID = o.PROGRAMID;
                    a.OBJECTID = o.ID;
                    a.GROUPID = g.Group.GROUPID;
                    o.PROGRAMID = p.ID;
                    return g;
                }, splitOn: "PROGRAMID, OBJECTID, GROUPID, NAME");

, но я не могу увидетьбольшая картина и что я делаю не так, потому что она выдает исключение

"When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id\r\nParameter name: splitOn"

Я могу использовать Dapper с более простой (одной) строкой sql внутреннего соединения, но я не могу заставить ее работать.

1 Ответ

0 голосов
/ 14 апреля 2019

Я просмотрел код и пришел к выводу, что вы просто не включаете поля, на которые нужно разделить. Добавьте следующие поля в свой запрос (возможно, добавив отдельные метки для типов, которые имеют одинаковые имена полей.

PROGRAMID, OBJECTID, GROUPID, NAME
...