Puis-je spécifier des noms de colonne de base de données pour les mappages dapper-dot-net?

c# dapper database

Question

Est-il possible avec dapper-dot-net d'utiliser un attribut pour spécifier les noms de colonnes à utiliser et non le nom de la propriété?

public class Code
{
    public int Id { get; set; }
    public string Type { get; set; }
    // This is called code in the table.
    public string Value { get; set; }
    public string Description { get; set; }
}

J'aimerais pouvoir nommer mes propriétés comme je le souhaite. Notre base de données n'a pas de convention de dénomination cohérente.

Si ce n'est pas avec dapper, existe-t-il d'autres options similaires?

Réponse acceptée

Vous pouvez également consulter Dapper-Extensions .

Dapper Extensions est une petite bibliothèque qui complète Dapper en ajoutant des opérations de base CRUD (Get, Insert, Update, Delete) pour vos POCO.

Il a un mappeur de classe automatique , où vous pouvez spécifier vos mappages de champs personnalisés. Par exemple:

public class CodeCustomMapper : ClassMapper<Code>
{
    public CodeCustomMapper()
    {
        base.Table("Codes");
        Map(f => f.Id).Key(KeyType.Identity);
        Map(f => f.Type).Column("Type");
        Map(f => f.Value).Column("Code");
        Map(f => f.Description).Column("Foo");
    }
}

Ensuite, vous faites juste:

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var code= new Code{ Type = "Foo", Value = "Bar" };
    int id = cn.Insert(code);
    cn.Close();
}

N'oubliez pas que vous devez conserver vos cartes personnalisées dans le même assembly que vos classes POCO. La bibliothèque utilise la réflexion pour rechercher des cartes personnalisées et ne scanne qu'un seul assemblage.

Mise à jour :

Vous pouvez maintenant utiliser SetMappingAssemblies pour enregistrer une liste d'assemblys à analyser:

DapperExtensions.SetMappingAssemblies(new[] { typeof(MyCustomClassMapper).Assembly });

Réponse populaire

Si vous utilisez une instruction select directement ou dans une procédure, vous pouvez simplement aliaser les colonnes.

SELECT code as Value FROM yourTable



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi