2015-12-30 7 views
13

Es gibt viele Möglichkeiten, Datenbankfeldnamen Klassennamen zuzuordnen, aber was ist der einfachste Weg, um die Unterstriche zu entfernen?Wie bekomme ich Dapper, um Unterstriche in Feldnamen beim Mapping zu ignorieren/zu entfernen?

public IEnumerable<PersonResult> GetPerson(int personId) 
    { 
     using (var dbConnection = _dbConnectionFactory.Create(ConnectionStrings.ProjectXYZ)) 
     { 
      IEnumerable<PersonResult> result = 
       dbConnection.Query<PersonResult>("fn_get_person", new { personId }, 
        commandType: CommandType.StoredProcedure).ToList(); 

      return result; 
     } 
    } 

Tabelle und Datenbankfelder:

person 
-------- 
person_id 
full_name 

Klasse, die funktioniert: (adrett ignoriert bereits Kapitalisierung)

public class PersonResult 
{  
    public int Person_Id { get; set; } 
    public string Full_Name { get; set; } 
} 

Was ich möchte die Klasse ändern:

public class PersonResult 
{  
    public int PersonId { get; set; } 
    public string FullName { get; set; } 
} 
+0

Sind Sie sicher, dass Sie mit PostgreSQL und SQL Server? – Andomar

+0

Ja. :) Raten Sie fragen, weil Befehlstyp "gespeicherte Prozedur" ist und postgresql nur Funktionen hat? Es funktioniert noch. – scw

Antwort

23
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 

Arbeit geleistet; p

+0

Wow. Ich stelle das in meine Verbindungsfabrik und es funktioniert, aber gibt es einen besseren Ort? – scw

+0

@scw gut, könnten Sie Ihre eigene Typ-Map-Implementierung schreiben ... aber: das funktioniert –

+0

Gibt es eine Möglichkeit, dies bedingt für einen einzigen Dapper Anruf zu tun? – julealgon

2

Die readme zeigt keine Unterstützung für das Umbenennen von Spalten. Sie könnten sie in select alias:

select person_id as personid, full_name as fullname from fn_get_person(); 

wie in this answer vorgeschlagen.

+1

Eigentlich wird es unterstützt - siehe meine Antwort –

Verwandte Themen