¿Por qué Dapper devolvería el recuento correcto y los valores nulos?

c# dapper

Pregunta

Quería jugar un poco con dapper, así que creé dos clases que representan la base de datos y una pequeña consulta de unión interna pero, por la razón que sea, los resultados son de valor nulo. Soy nuevo en Dapper, así que por lo que he leído en los documentos y una excelente respuesta en SO ( ¿Cómo escribo una a muchas consultas en Dapper.Net? ), Parece que tengo esta configuración correctamente. ¿Por qué el recuento de resultados sería correcto, pero los valores son todos nulos?

 con.Open();
    string query = @"select Orders.OrderID as OrderID,
                     Orders.OrderNumber as Orders_OrderNumber,
                     Product.ProductNumber as Product_ProductNumber,
                     Product.ProductID as Product_ProductID,
                     Product.OrderID as Product_OrderID
                     from Orders INNER JOIN Product ON Orders.OrderID = Product.OrderID WHERE Orders.OrderNumber LIKE '%" + orderNumber + "%'";
    dynamic data = con.Query<dynamic>(query);
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Orders), new List<string> { "OrderID" });
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Product), new List<string> { "ProductID" });

    var orders = (Slapper.AutoMapper.MapDynamic<Orders>(data) as IEnumerable<Orders>).ToList();
    //var orders = Slapper.AutoMapper.Map<Orders>(data);
    return orders; // count is correct but values are null

Clases:

 public class Product
    {
        public int ProductID { get; set; }
        public int OrderID { get; set; }
        public string ProductNumber { get; set; }
    }

 public class Orders
    {
        public int OrderID { get; set; }
        public string OrderNumber { get; set; }
        public List<Product> Products { get; set; }
    }

Cualquier ayuda sería muy apreciada.

¡Gracias!

Respuesta aceptada

Me imagino que su mapeador no está funcionando como se esperaba. Entra en tu mapeador y asegúrate de que esté funcionando como se esperaba.


Respuesta popular

Las mejores prácticas con el uso de Auto Mappers son Declaraciones de aserción, especialmente en el caso de la asignación de objetos dinámicos. Mira este ejemplo . Podría ayudarte a encontrar el problema.

Además, echando un vistazo al código fuente de Mapper a continuación:

public TDestination Map<TDestination>(object source, Action<IMappingOperationOptions> opts)
    {
        var mappedObject = default(TDestination);
        if (source != null)
        {
            var sourceType = source.GetType();
            var destinationType = typeof(TDestination);

            mappedObject = (TDestination)Map(source, sourceType, destinationType, opts);
        }
        return mappedObject;
    }

Parece que devolverá el valor predeterminado de T cuando se devuelva una colección vacía.



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é