Wie Dapper zwischen 2 Spalten mit dem gleichen Namen wählt

dapper

Frage

Ich habe etwas geerbten Code, der Dapper verwendet, um eine SQL SELECT in ein Objekt zuzuordnen. Das SELECT hat mehrere Spalten mit demselben Namen (einige Spalten werden aus Platzgründen weggelassen).

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

Eine Analyse der Daten zeigt, dass nur eine der 2 CreatedDate-Spalten für jeden Datensatz gefüllt ist. Das Ausführen einiger Tests ergab, dass Dapper anscheinend das CreationDate nicht-NULL auswählt. Ich konnte keine Dokumentation darüber finden, wie Dapper mit dieser Situation umgeht. Kann ich mich darauf verlassen, dass Dapper immer den Nicht-NULL-Wert auswählt?

Beliebte Antwort

Dapper ist (Mikro-) ORM und sollte für Datenbank-CRUD-Operationen verwendet werden.

Das heißt, Ihre Geschäftslogik sollte woanders hingehen. Die Implementierung ist ziemlich einfach. Erstellen Sie keine Spalten mit doppelten Namen. Holen Sie Daten aus der Datenbank mithilfe von Dapper und wenden Sie Ihre Geschäftslogik an anderer Stelle an, z.

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

Basierend auf Ihrer Recherche, auch wenn Nicht-Null-Spalte von Dapper gewählt wird; Dies kann in zukünftigen Versionen nicht garantiert werden.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow