dapper -multi-mapping: retorno sql plano a objetos anidados

c# dapper

Pregunta

Tengo una empresa que contiene un objeto de dirección. El retorno de SQL es plano, y estoy tratando de obtener Query <> para cargar todos los objetos.

cnn.Query<Company,Mailing,Physical,Company>("Sproc", 
                    (org,mail,phy) =>
                    {
                        org.Mailing = mail;
                        org.Physical = phy;
                        return org;
                    },
                    new { ListOfPartyId = stringList }, null, true, commandTimeout: null,
                    commandType: CommandType.StoredProcedure, splitOn: "MailingId,PhyscialId").ToList();

No estoy seguro si tengo el SplitOn correcto tampoco. Recibo el mensaje:

Al utilizar las API de mapeo múltiple, asegúrese de configurar el parametro splitOn si tiene claves que no sean Id. Nombre del parámetro: splitOn

Las sugerencias serían geniales.

Los ejemplos en Test.cs no son lo que el código solicita como parámetros para las consultas. Estos necesitan ser actualizados

Respuesta aceptada

para mí esto funciona perfecto ... ¿tal vez un error tipográfico?

Veo PhyscialId que definitivamente parece uno.

class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Mailing Mailing { get; set; }
    public Physical Physical { get; set; }
}

class Mailing
{
    public int MailingId { get; set; }
    public string Name { get; set; }
}

class Physical
{
    public int PhysicalId { get; set; }
    public string Name { get; set; }
}

public void TestSOQuestion()
{
    string sql = @"select 1 as Id, 'hi' as Name, 1 as MailingId, 
       'bob' as Name, 2 as PhysicalId, 'bill' as Name";
    var item = connection.Query<Company, Mailing, Physical, Company>(sql,
                (org, mail, phy) =>
                {
                    org.Mailing = mail;
                    org.Physical = phy;
                    return org;
                },
                    splitOn: "MailingId,PhysicalId").First();


    item.Mailing.Name.IsEqualTo("bob");
    item.Physical.Name.IsEqualTo("bill");

}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué