Cómo elige Dapper entre 2 columnas con el mismo nombre

dapper

Pregunta

Tengo un código heredado que usa Dapper para asignar un SQL SELECT a un objeto. SELECT tiene varias columnas con el mismo nombre (algunas columnas se omiten por brevedad).

SELECT
    created_timestamp AS CreatedDate,
    imported_timestamp AS CreatedDate
FROM Orders
WHERE OrderId = @OrderId

Un análisis de los datos muestra que solo una de las 2 columnas CreatedDate está poblada para cada registro. La ejecución de algunas pruebas reveló que Dapper parece estar escogiendo el CreatedDate no NULL. No pude encontrar ninguna documentación sobre cómo Dapper maneja esta situación. ¿Puedo confiar en que Dapper siempre escoja el valor no NULL?

Respuesta popular

Dapper es (micro) ORM y debe usarse para operaciones CRUD de base de datos.

Dicho eso, tu lógica comercial debería ir a otro lugar. La implementación es bastante simple. No crees columnas con nombres duplicados. Obtenga datos de la base de datos utilizando dapper y aplique su lógica comercial en otro lugar como comprobar null o de lo contrario.

//Following is query
SELECT
    created_timestamp AS CreatedDate,
    imported_timestamp AS ImportedDate
FROM Orders
WHERE OrderId = @OrderId

//Following is your POCO/DTO
public class Order
{
    public int OrderId;//or Guid if that suits you
    public string CreatedDate;//or DateTime if that suits you
    public string ImportedDate;//or DateTime if that suits you
}

//Following is your business logic
Order order = orderService.GetOrder(orderId);
if(order.CreatedDate != null)
    //Do something
else if(order.ImportedDate != null)
    //Do something else

En función de su investigación, incluso si Dapper elige una columna no nula; esto puede no estar garantizado en futuras versiones.



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é