2016-12-27 2 views
0

Comment puis-je lire dans ma base de données un attribut int qui dans mon système est un attribut de type Enumeration dans le motif de référentiel, C#.Enumération dans le modèle de référentiel C#

J'ai fait une classe:

public class Status : Enumeration 
{ 
    public static readonly Status Active = new Status(0, "Active"); 
    public static readonly Status Inactive = new Status(1, "Inactive"); 
    public static readonly Status Removed = new Status(2, "Removed"); 

    public Status() 
    { 
    } 

    private Status(int value, string displayName) 
     : base(value, displayName) 
    { 
    } 
} 

Ainsi, dans la classe Bank je mets un attribut d'état;

Au moment de la lecture de la banque où se trouve ma classe Bank et d'une table avec un attribut Status type int, plus l'attribut est nul.

+0

Bonjour et bienvenue dans StackOverflow. Veuillez prendre le temps de lire la page d'aide, en particulier les sections intitulées ["Quels sujets puis-je poser à propos d'ici?"] (Http://stackoverflow.com/help/on-topic) et ["Quels types de questions dois-je évitez de demander? "] (http://stackoverflow.com/help/dont-ask). Et plus important, s'il vous plaît lire [la liste de contrôle de la question Stack Overflow] (http://meta.stackexchange.com/q/156810/204922). Vous pouvez également en savoir plus sur [Exemples minimaux, complets et vérifiables] (http://stackoverflow.com/help/mcve). –

+0

Utilisez-vous EntityFramework ou tout simplement ADO.net? –

+0

ADO.net avec DapperRepository – Dariel

Répondre

0

J'introduirait une méthode statique pour convertir les nombres entiers « ENUM » dans votre classe, par exemple

public class Status : Enumeration 
    { 
     //YOUR CODE 

     public static Status FromInteger(int value){ 
     switch(value){ 
      case 0: 
      return Active; 
      case 1: 
      return Inactive; 
      case 2: 
      return Removed; 
      default: 
      throw new ArgumentException(); 
     } 
     } 
    } 

Je ne l'ai pas traité DapperRepository. Mais un coup d'œil rapide à ClassMapper<T> révèle que vous pouvez tirer parti de la conversion personnalisée en utilisant la méthode AutoMap. Cependant, je n'ai trouvé ni documentation ni exemple. Par conséquent, je ne peux proposer qu'une solution universelle.

public class Bank { 

     //Standard fields that are mapped to a table in database 

     public Status StatusEnum { 
     get { 
      Status.FromInteger(StatusId); //StatusId is a property mapped to table's field 
     } 

     set { 
      //TODO Handle null value 
      StatusId = value.Value; 
     } 
     } 
    } 

REMARQUE:

  • Je suppose que la propriété StatusId est un champ mis en correspondance avec le champ qui contient la valeur d'état de la table.
  • Ce code présente un problème évident - StatusId autorise les valeurs hors gamme. Vous devrez effectuer une validation supplémentaire pour maintenir la cohérence des données.
+0

Merci beaucoup – Dariel