Entity Framework

Dificulté:

Une solution beaucoup plus rapide pour générer toutes les classes.

Pour travailler avec EF il faut tout d’abord créer un data model.

Créer un créer répertoire Model dans votre projet. Puis clic droit « ajouter » --> « Nouvel élément » -->Sélectionner ADO.Net Entity Data Model. Cliquer sur « Ajouter ». Choisir « EF Designer à partir de la base de données ».

Ensuite il faut se connecter à votre serveur SQL (MySQL ou SQL Server) et sélectionner toutes les tables de votre base.

Dans cet exemple nous avons utilisé SQL Server mais rien ne change si vous utilisez MySQL.

A la fin de l’opération vous devez obtenir le schéma UML suivant qui est la traduction de vos tables. Si vous n’avez pas de clé étrangère il n’y aurait pas de relation entre les deux tables.

Classe Entity Framework

Si vous regardez les fichiers générés automatiquement par Entity Framework dans Visual Studio, vous voyez vos deux classes et plus particulièrement la classe adhérent. Les types des champs sont déduits de ceux de votre base.

Génération code Entity Framework

Ensuite on pourrait directement utiliser EF directement mais ici on va créer un repository en se basant sur le repository pattern.

L’intérêt du repository ?

Masquer la complexité de certaines requêtes et réaliser une abstraction entre l’interface graphique (ou les autres couches) et Entity Framework.

     class AdherentDAL
    {
        private associationEntities context;
        public AdherentDAL(associationEntities assocEnt)
        {
            context = assocEnt;
        }
        
        /// <summary>
        /// Ajoute un adhérent du contexte
        /// </summary>
        /// <param name="unAdherent"></param>
        public void Add(adherent unAdherent)
        {
            context.adherent.Add(unAdherent);
        }
        
        
        /// <summary>
        /// Supprime un adherent du contexte
        /// </summary>
        /// <param name="unAdherent"></param>
        public void Delete(int id)
        {
            adherent unAdherent = context.adherent.Find(id);
            context.adherent.Remove(unAdherent);
        }
        /// <summary>
        /// Retourne tous les adhérents de la table
        /// </summary>
        /// <returns>tous les adhérents</returns>
        public List<adherent> GetAll()
        {
            return context.adherent.ToList();
        }
        /// <summary>
        /// Retourne un adhérent
        /// </summary>
        /// <param name="id">id de l'adhérent</param>
        /// <returns>un adhérent</returns>
        public adherent GetById(int id)
        {
            return context.adherent.Find(id);
           
        }
        /// <summary>
        /// Sauvegarde toutes les modifications apportées au contexte.
        /// </summary>
        public void Save()
        {
            context.SaveChanges();
        }
    }

Utilisation de la « Data Access Layer « pour s’interfacer avec la base au niveau de l’interface graphique.

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //Création de l'entité. Le nom est donnée au moment de la création de la connexion avec SQL.
            associationEntities ent = new associationEntities(); 
            //On utilise la couche Data Layer pour s'interfacer avec la base
            AdherentDAL adhDAL = new AdherentDAL(ent);
            List<adherent> lesAdherents = adhDAL.GetAll();
            //Affichage dans une listview.
            foreach (var item in lesAdherents)
            {
                ListViewItem listItem = new ListViewItem(item.Nom);
                listItem.SubItems.Add(item.Prenom);
                listItem.SubItems.Add(item.Ville);
                listItem.SubItems.Add(item.CodePostal);
                listItem.SubItems.Add(item.DateNaissance.Value.ToShortDateString());
                listItem.SubItems.Add(item.typeadhesion1.Libelle);
                listViewAdherents.Items.Add(listItem);
            }
            //Exemple de récupération d'un adhérent
            adherent a = adhDAL.GetById(2);
            //Exemple de récupération de tous les adhérents
            List<adherent> l = adhDAL.GetAll();
            //Exemple de création d'un adhérent.
            adherent nouvelAdherent = new adherent();
            nouvelAdherent.Nom = "Marchandiau";
            adhDAL.Add(nouvelAdherent);
            //Une fois que vous avez ajouté ou supprimé des adhérents 
            //il faut appeler save pour sauvegarder les données dans la base.  
            adhDAL.Save();
            
        }
    }

Vous êtes quasiment obligé d’utiliser un ORM (Objet Relational-Mapping) comme Entity Framework si vous avez beaucoup de tables sinon le travail peut être très fastidieux.

L'exemple complet est sur GitHub.