Mappage Dapper.NET avec des annotations de données

dapper data-annotations

Question

J'ai donc une classe avec une propriété comme celle-ci:

public class Foo
{
  [Column("GBBRSH")
  public static string Gibberish { get; set;}
  ....
}

Pour enregistrer des données, je les ai configurées pour que les instructions update / insert utilisent une fonction personnalisée:

public static string GetTableColumnName(PropertyInfo property)
{
  var type = typeof(ColumnAttribute);
  var prop = property.GetCustomAttributes(type, false);

  if (propr.Count() > 0)
    return ((ColumnAttribute)prop.First()).Name;
  return property.Name;
}

Cela gère bien, mais j'ai remarqué que lorsque je vais récupérer les données, il ne récupère pas réellement les données via la fonction pour cette colonne particulière. J'ai remarqué que les autres données présentes avaient été extraites, mais la colonne en question était le seul champ contenant des données non récupérées.

1) Est-il possible d'utiliser la fonction GetTableColumnName pour la partie récupération de Dapper?

2) Existe-t-il un moyen de forcer Dapper.NET à lancer une exception si un tel scénario se produit? Je ne veux vraiment pas avoir une fausse impression de sécurité que tout fonctionne comme prévu alors que ce n’est pas le cas (je me rends compte que j’utilise le mapping que Dapper.NET n’utilise pas par défaut, mais je veux configurez-le de cette manière).

modifier:

Je cherche dans la source SqlMapper de Dapper et a trouvé:

 private static IEnumerable<T> QueryInternal<T>(params) // my knowledge of generics is limited, but how does this work without a where T : object?
 {
   ...
   while (reader.Read())
   {
     yield return (T)func(reader);
   }
   ...
 }

alors j'ai appris deux choses après avoir trouvé cela. Lisez sur Func et lisez le rendement (jamais utilisé auparavant). Je suppose que je dois transmettre reader.Read () à une autre fonction (qui vérifie les en-têtes de colonne et les insertions dans les objets de manière appropriée) et céder le résultat?

Réponse acceptée

Vous pouvez modifier votre instruction select pour "SELECT [Column("GBBRSH")] AS Gibberish" alias tels que "SELECT [Column("GBBRSH")] AS Gibberish" et fournir un mappage entre le nom de l'attribut et le nom de la propriété poco.

De cette façon, Dapper remplira les propriétés correspondantes, car il suffit que votre POCO corresponde au nom exact de la colonne.



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