Come Dapper sceglie tra 2 colonne con lo stesso nome

dapper

Domanda

Ho un codice ereditato che usa Dapper per mappare un SELECT SQL in un oggetto. SELECT ha più colonne con lo stesso nome (alcune colonne sono omesse per brevità).

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

Un'analisi dei dati mostra solo una delle 2 colonne create da CreatedDate per ciascun record. L'esecuzione di alcuni test ha rivelato che Dapper sembra scegliere il CreatedDate non NULL. Non sono riuscito a trovare alcuna documentazione su come Dapper gestisce questa situazione. Posso contare su Dapper che sceglie sempre il valore non NULL?

Risposta popolare

Dapper è (micro) ORM e dovrebbe essere utilizzato per le operazioni CRUD del database.

Detto questo, la tua logica di business dovrebbe andare da qualche altra parte. L'implementazione è abbastanza semplice. Non creare colonne con nomi duplicati. Ottieni dati dal database usando dapper e applica la tua logica di business in altri posti, come il controllo di null o altro.

//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

In base alla tua ricerca, anche se la colonna non null viene scelta da Dapper; questo potrebbe non essere garantito nelle versioni future.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow