2015-12-30 24 views
13

Esistono molti modi per mappare i nomi dei campi del database in nomi di classi, ma qual è il modo più semplice per rimuovere solo i caratteri di sottolineatura?Come far sì che Dapper ignori/rimuova i caratteri di sottolineatura nei nomi dei campi durante la mappatura?

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; 
     } 
    } 

tabella e il database campi:

person 
-------- 
person_id 
full_name 

Classe che funziona: (Dapper ignora già capitalizzazione)

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

Quello che vorrei cambiare la classe a:

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

Sei sicuro che si sta utilizzando PostgreSQL e non di SQL Server? – Andomar

+0

Sì. :) Suppongo che tu stia chiedendo perché il comando è "stored procedure" e postgresql ha solo delle funzioni? Funziona ancora. – scw

risposta

23
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 

lavoro fatto; p

+0

Wow. Lo metto nella mia fabbrica di connessione e funziona, ma c'è un posto migliore? – scw

+0

@scw beh, potresti scrivere la tua implementazione della mappa del tipo ... ma: funziona così –

+0

C'è un modo per farlo condizionatamente per una singola chiamata Dapper? – julealgon

2

The readme non mostra alcun supporto per la ridenominazione delle colonne. li si potrebbe alias nel select:

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

come suggerito in this answer.

+1

In realtà, è supportato - vedi la mia risposta –