Publié mercredi 29 octobre 2008 21:34 par Luke77

Mapping Attribute III

Je fait suite aux articles précédants avec ce nouvel opus qui concernent le mapping à proprement parlé. Afin d'expliquer plus clairement le moyen d'y parvenir, il est plus prudent de commencer par une méthode relativement simple : par réflection.

Cela se résume à une méthode et une seule que voici :

   1: public override long Map(E entity, SqlDataReader reader)
   2: {
   3:     long bitMap = 0;
   4:  
   5:     for (int i = 0; i < reader.FieldCount; i++)
   6:     {
   7:         string columName = reader.GetName(i);
   8:         FieldMapped fieldMapped = null;
   9:  
  10:         if (_specificMapping.TryGetValue(columName, out fieldMapped))
  11:         {
  12:             if (fieldMapped.Field != null)
  13:             {
  14:                 if (reader[ i ] is DBNull)
  15:                 {
  16:                     fieldMapped.Field.SetValue(entity, null);
  17:                 }
  18:                 else
  19:                 {
  20:                     fieldMapped.Field.SetValue(entity, MappingHelper.ConvertTo(fieldMapped.Field.FieldType, reader[ i ]));
  21:                 }
  22:             }
  23:             else
  24:             {
  25:                 if (reader[ i ] is DBNull)
  26:                 {
  27:                     fieldMapped.Property.SetValue(entity, null, null);
  28:                 }
  29:                 else
  30:                 {
  31:                     fieldMapped.Property.SetValue(entity, MappingHelper.ConvertTo(fieldMapped.Property.PropertyType, reader[ i ]), null);
  32:                 }
  33:             }
  34:             bitMap |= fieldMapped.MappingAttribute.BitFieldIndex;
  35:         }
  36:     }
  37:  
  38:     return bitMap;
  39: }

 

Qu'est-ce que l'on fait ici ? Pour chacune des colonnes du DataReader, on vérifie si le nom de la colonne est présent dans les mapping que l'on découvert grâce au code précédant. Si c'est le cas, on affecte la valeur trouvée au Field ou Property. La valeur est convertie grâce à une petite classe que je ne détaillerai pas ici mais qui se contente de faire des ConvertTo ou des cast.

Dernière petite chose, le bitmap est mis à jour en fonction des champs que l'on aura réussi à mapper :-)

 

Bon, c'était easy comme tout, prochain article on fait la même chose mais avec de l'IL généré dynamiquement.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

# re: Mapping Attribute III @ jeudi 30 octobre 2008 12:45

Pas mal intéressant j'attends le prochain article avec le code IL !!!

D'ailleurs je voudrais savoir quels sont les bons bouquins sur l'IL ???

merci

teddyalbina


Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 4 heures et 38 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59