Dapper: Ist es möglich, die Typzuordnung eines bestimmten Feldes eines bestimmten Typs anzupassen?

c# dapper micro-orm sql

Frage

Sagen wir, ich habe diese User :

public class User
{
    public int      ID          { get; set; }
    public string   FirstName   { get; set; }
    public string   LastName    { get; set; }
    public string   Email       { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime LastLogin   { get; set; }
}

Welche möchte ich der folgenden Tabelle zuordnen:

CREATE TABLE "user" (
  "ID"          int(11) NOT NULL AUTO_INCREMENT,
  "FirstName"   varchar(45) DEFAULT NULL,
  "LastName"    varchar(45) DEFAULT NULL,
  "Email"       varchar(255) NOT NULL,
  "DateCreated" int(11) NOT NULL,
  "LastLogin"   int(11) NOT NULL,
  PRIMARY KEY ("ID")
)

Oder einfacher ausgedrückt: Ich möchte die DateTime-Eigenschaften als int-Felder in der Datenbank speichern. Dies ist jedoch für diese Klasse / Tabelle der Fall. Andere Klassen / Tabellen werden möglicherweise anders zugeordnet. Ich dachte an etwas in der Art einer benutzerdefinierten Konvertierungsfunktion in Kombination mit einer Typ- oder Mitgliedskarte.

Ist das mit Dapper möglich und wenn ja wie?

Akzeptierte Antwort

Die Quintessenz ist, dass Dapper dies nicht durch Design unterstützt. Eines seiner Kernprinzipien ist eine 1: 1-Zuordnung zwischen der Tabelle und dem Objekt, mit Ausnahme der Zuordnung von Spaltennamen zu Eigenschaftsnamen.

Die Lösung, mit der ich am Ende ging, bestand darin, Dapper mit AutoMapper zu kombinieren, was wir sowieso ohnehin schon intensiv nutzen. In unseren Dapper-DAOs verwenden wir in komplexen Fällen ein Entitätsobjekt, das vom Domänenobjekt getrennt ist, und ordnen es zwischen ihnen an. Im Grunde wird die nicht-triviale Zuordnung zwischen Domäne und Tabelle zu einer einfachen Frage des Objekt-Objekt-Mappings.


Beliebte Antwort

Dies sollte jetzt mit benutzerdefinierten SqlMapper.TypeHandler möglich SqlMapper.TypeHandler . Siehe dieses Beispiel in Komponententests. Der Nachteil ist, dass die benutzerdefinierte Typbehandlung auf alle Felder desselben Typs angewendet wird. In Ihrem Fall werden alle DateTime-Eigenschaften über den Typhandler ausgewertet.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum