Utilisation de CustomPropertyTypeMap pour mapper des propriétés spécifiques

c# dapper dapper-extensions data-access-layer sql

Question

J'ai quelques classes qui doivent avoir une ou deux propriétés (sur plusieurs dizaines) mappées sur une colonne d'une table qui a un nom de colonne différent. Je ne veux pas mapper toutes les propriétés, alors que deux seulement diffèrent des noms de colonne dans la base de données.

Je ne trouve pas de documents corrects sur toutes les différentes options de mappage pouvant être utilisées avec CustomPropertyTypeMap, ils montrent tous simplement le mappage de l'objet entier avec le CustomPropertyTypeMap (comme le fait la classe de tests Dapper). Lorsque j'utilise les éléments suivants:

// Set up custom repository parameter mappings.
var map = new CustomPropertyTypeMap(typeof(T),
    (type, columnName) => type
        .GetProperties()
        .FirstOrDefault(
            prop => prop.GetCustomAttributes(false)
                .OfType<RepositoryParameterAttribute>()
                .Any(attr => attr.ParameterName == columnName)));

Dapper.SqlMapper.SetTypeMap(typeof(T), map);

// Query the database
items = await databaseConnection.QueryAsync<T>(
    storedProcedure,
    itemParameters,
    commandType: CommandType.StoredProcedure,
    transaction: transaction);

Les propriétés qui ne sont pas décorées avec RepositoryParameterAttribute renvoient null (ou 0). Puis-je l'utiliser pour cartographier uniquement des propriétés spécifiques et laisser Dapper hydrater les attributs non décorés restants, ou vais-je devoir faire quelque chose de personnalisé?

Merci.

Réponse populaire

Dapper.FluentMap vous permet de configurer les mappages des propriétés POCO aux tables de colonnes. Cela se fait en utilisant le CustomPropertyTypeMap et en utilisant le DefaultTypeMap comme DefaultTypeMap de secours.

Il est disponible sous forme de package NuGet , mais vous pouvez également consulter la source et voir comment j'ai implémenté CustomerPropertyTypeMap et créer une implémentation plus simple pour vous-même.



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