Slapper.Automapper con Dapper.net utilizando Guid Ids

dapper slapper.automapper

Pregunta

Necesito asignar una consulta SQL aplanada de uno a muchos en objetos anidados usando Dapper.net.

Slapper.Automapper parece una buena forma de hacerlo; como se detalla en la respuesta a esta pregunta:

¿Cómo escribo una a muchas consultas en Dapper.Net?

Conjunto de datos erróneos que obtengo usando Guids: enter image description here

public string MrFlibble3()
{
    using (var connection = new SqlConnection(Constr))
    {
        Slapper.AutoMapper.Cache.ClearInstanceCache();

        const string sql = @"SELECT tc.[IDG] as ContactIdg
                                ,tc.[ContactName] as ContactName
                                ,tp.[Idg] AS TestPhones_PhoneIdg
                                ,tp.[ContactIdg] AS TestPhones_ContactIdg
                                ,tp.[Number] AS TestPhones_Number
                                FROM TestContact tc
                                INNER JOIN TestPhone tp ON tc.Idg = tp.ContactIdg";

        // Step 1: Use Dapper to return the  flat result as a Dynamic.
        dynamic test = connection.Query<dynamic>(sql);

        // Step 2: Use Slapper.Automapper for mapping to the POCO Entities.
        // - IMPORTANT: Let Slapper.Automapper know how to do the mapping;
        //   let it know the primary key for each POCO.
        // - Must also use underscore notation ("_") to name parameters;
        //   see Slapper.Automapper docs.
        Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(TestContact), new List<string> { "ContactIDg" });
        Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(TestPhone), new List<string> { "PhoneIdg" });

        var testContact = (Slapper.AutoMapper.MapDynamic<TestContact>(test) as IEnumerable<TestContact>).ToList();

        string flibblethis = "";

        foreach (var c in testContact)
        {
            foreach (var p in c.TestPhones)
            {
                // Console.Write("ContactName: {0}: Phone: {1}\n", c.ContactName, p.Number);
                flibblethis += "Contact Name: " + c.ContactName + ". Number: " + p.Number + "<br />";
            }
        }

        return flibblethis;
    }
}

Funciona bien en el ejemplo, excepto Slapper.Automapper no parece funcionar si los Id son Guids en lugar de Ints.

¿Hay alguna forma de usar las ID de Guid con Slapper.Automapper? ¿O existe una forma alternativa de asignar esto con Dapper.net?

(Slapper.Automapper no se usa ampliamente y no puedo ver nada en línea sobre este tema).

Respuesta aceptada

Tiene mayúsculas y minúsculas variables en los nombres de sus propiedades, por ejemplo, ContactIdg y ContactIDg . Slapper realiza asignaciones sensibles a mayúsculas y minúsculas, consulta este problema .



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é