J'ai un formulaire principal comme suit : 
namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    partial class Form1
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
            DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle();
            DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle();
            bouton10000Precedent = new Button();
            boutonPrecedentToute = new Button();
            bouton1Precedent = new Button();
            bouton1Suivant = new Button();
            bouton10000Suivant = new Button();
            boutonSuivantToute = new Button();
            boiteListeAffichageTables = new ListBox();
            boutonConnexionBDD = new Button();
            grilleDonneesTables = new DataGridView();
            BoutonValidationChangementsTable = new Button();
            BoutonAjoutEnregistrement = new Button();
            ((System.ComponentModel.ISupportInitialize)grilleDonneesTables).BeginInit();
            SuspendLayout();
            // 
            // bouton10000Precedent
            // 
            resources.ApplyResources(bouton10000Precedent, "bouton10000Precedent");
            bouton10000Precedent.Name = "bouton10000Precedent";
            bouton10000Precedent.UseVisualStyleBackColor = true;
            bouton10000Precedent.Click += bouton10000Precedent_Click;
            bouton10000Precedent.MouseEnter += bouton10000Precedent_MouseEnter;
            bouton10000Precedent.MouseLeave += bouton10000Precedent_MouseLeave;
            // 
            // boutonPrecedentToute
            // 
            resources.ApplyResources(boutonPrecedentToute, "boutonPrecedentToute");
            boutonPrecedentToute.Name = "boutonPrecedentToute";
            boutonPrecedentToute.UseVisualStyleBackColor = true;
            boutonPrecedentToute.Click += bouton10000PrecedentToute_Click;
            boutonPrecedentToute.MouseEnter += boutonPrecedentToute_MouseEnter;
            boutonPrecedentToute.MouseLeave += boutonPrecedentToute_MouseLeave;
            // 
            // bouton1Precedent
            // 
            resources.ApplyResources(bouton1Precedent, "bouton1Precedent");
            bouton1Precedent.Name = "bouton1Precedent";
            bouton1Precedent.UseVisualStyleBackColor = true;
            bouton1Precedent.Click += bouton1Precedent_Click;
            bouton1Precedent.MouseEnter += bouton1Precedent_MouseEnter;
            bouton1Precedent.MouseLeave += bouton1Precedent_MouseLeave;
            // 
            // bouton1Suivant
            // 
            resources.ApplyResources(bouton1Suivant, "bouton1Suivant");
            bouton1Suivant.Name = "bouton1Suivant";
            bouton1Suivant.UseVisualStyleBackColor = true;
            bouton1Suivant.Click += bouton1Suivant_Click;
            bouton1Suivant.MouseEnter += bouton1Suivant_MouseEnter;
            bouton1Suivant.MouseLeave += bouton1Suivant_MouseLeave;
            // 
            // bouton10000Suivant
            // 
            resources.ApplyResources(bouton10000Suivant, "bouton10000Suivant");
            bouton10000Suivant.Name = "bouton10000Suivant";
            bouton10000Suivant.UseVisualStyleBackColor = true;
            bouton10000Suivant.Click += bouton10000Suivant_Click;
            bouton10000Suivant.MouseEnter += bouton10000Suivant_MouseEnter;
            bouton10000Suivant.MouseLeave += bouton10000Suivant_MouseLeave;
            // 
            // boutonSuivantToute
            // 
            resources.ApplyResources(boutonSuivantToute, "boutonSuivantToute");
            boutonSuivantToute.Name = "boutonSuivantToute";
            boutonSuivantToute.UseVisualStyleBackColor = true;
            boutonSuivantToute.Click += bouton10000SuivantToute_Click;
            boutonSuivantToute.MouseEnter += boutonSuivantToute_MouseEnter;
            boutonSuivantToute.MouseLeave += boutonSuivantToute_MouseLeave;
            // 
            // boiteListeAffichageTables
            // 
            resources.ApplyResources(boiteListeAffichageTables, "boiteListeAffichageTables");
            boiteListeAffichageTables.FormattingEnabled = true;
            boiteListeAffichageTables.Name = "boiteListeAffichageTables";
            boiteListeAffichageTables.SelectedIndexChanged += boiteListeAffichageTables_SelectedIndexChanged;
            // 
            // boutonConnexionBDD
            // 
            resources.ApplyResources(boutonConnexionBDD, "boutonConnexionBDD");
            boutonConnexionBDD.BackColor = SystemColors.Control;
            boutonConnexionBDD.Name = "boutonConnexionBDD";
            boutonConnexionBDD.UseVisualStyleBackColor = false;
            boutonConnexionBDD.Click += boutonConnexionBDD_Click;
            // 
            // grilleDonneesTables
            // 
            resources.ApplyResources(grilleDonneesTables, "grilleDonneesTables");
            grilleDonneesTables.AllowUserToOrderColumns = true;
            grilleDonneesTables.BackgroundColor = SystemColors.InactiveCaption;
            dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle1.BackColor = SystemColors.Control;
            dataGridViewCellStyle1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0);
            dataGridViewCellStyle1.ForeColor = SystemColors.WindowText;
            dataGridViewCellStyle1.SelectionBackColor = SystemColors.Highlight;
            dataGridViewCellStyle1.SelectionForeColor = SystemColors.HighlightText;
            dataGridViewCellStyle1.WrapMode = DataGridViewTriState.True;
            grilleDonneesTables.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
            grilleDonneesTables.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            grilleDonneesTables.Name = "grilleDonneesTables";
            dataGridViewCellStyle2.Alignment = DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle2.BackColor = SystemColors.Control;
            dataGridViewCellStyle2.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0);
            dataGridViewCellStyle2.ForeColor = SystemColors.WindowText;
            dataGridViewCellStyle2.SelectionBackColor = SystemColors.Highlight;
            dataGridViewCellStyle2.SelectionForeColor = SystemColors.HighlightText;
            dataGridViewCellStyle2.WrapMode = DataGridViewTriState.True;
            grilleDonneesTables.RowHeadersDefaultCellStyle = dataGridViewCellStyle2;
            // 
            // BoutonValidationChangementsTable
            // 
            resources.ApplyResources(BoutonValidationChangementsTable, "BoutonValidationChangementsTable");
            BoutonValidationChangementsTable.Name = "BoutonValidationChangementsTable";
            BoutonValidationChangementsTable.UseVisualStyleBackColor = true;
            BoutonValidationChangementsTable.Click += BoutonValidationChangementsTable_Click;
            // 
            // BoutonAjoutEnregistrement
            // 
            resources.ApplyResources(BoutonAjoutEnregistrement, "BoutonAjoutEnregistrement");
            BoutonAjoutEnregistrement.Name = "BoutonAjoutEnregistrement";
            BoutonAjoutEnregistrement.UseVisualStyleBackColor = true;
            BoutonAjoutEnregistrement.Click += BoutonAjoutEnregistrement_Click;
            // 
            // Form1
            // 
            resources.ApplyResources(this, "$this");
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = SystemColors.ActiveCaption;
            Controls.Add(BoutonAjoutEnregistrement);
            Controls.Add(BoutonValidationChangementsTable);
            Controls.Add(grilleDonneesTables);
            Controls.Add(boutonConnexionBDD);
            Controls.Add(boiteListeAffichageTables);
            Controls.Add(boutonSuivantToute);
            Controls.Add(bouton10000Suivant);
            Controls.Add(bouton1Suivant);
            Controls.Add(bouton1Precedent);
            Controls.Add(boutonPrecedentToute);
            Controls.Add(bouton10000Precedent);
            Name = "Form1";
            ((System.ComponentModel.ISupportInitialize)grilleDonneesTables).EndInit();
            ResumeLayout(false);
        }

        #endregion

        private Button bouton10000Precedent;
        private Button boutonPrecedentToute;
        private Button bouton1Precedent;
        private Button bouton1Suivant;
        private Button bouton10000Suivant;
        private Button boutonSuivantToute;
        private ListBox boiteListeAffichageTables;
        private Button boutonConnexionBDD;
        private DataGridView grilleDonneesTables;
        private Button BoutonValidationChangementsTable;
        private Button BoutonAjoutEnregistrement;
    }
}

Le code correspondant est celui-ci : 
using Microsoft.EntityFrameworkCore;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    public partial class Form1 : Form
    {
        int indexMinCourant = 0;
        int nombreAffichages = 0;
        int indexMin = 1;
        int indexMax = 0;

        bool popupDebut = false;
        bool popupFin = false;
        //bool apparenceSourisBloquee = false;
        private bool boutonsDesactives = false;

        public Form1()
        {
            InitializeComponent();


            // tant qu'aucun intem de boiteListeAffichageTables n'est sélectionné, on ne peut pas sélectionner des boutons : on les désactive

            if (boiteListeAffichageTables.SelectedIndex == -1)
            {
                DesacitverTousBoutons();
            }
        }

        private void DesacitverTousBoutons()
        {
            // Modifier l'apparence des boutons pour qu'ils paraissent désactivés
            bouton1Precedent.BackColor = Color.DarkGray;
            bouton10000Precedent.BackColor = Color.DarkGray;
            boutonPrecedentToute.BackColor = Color.DarkGray;
            bouton1Suivant.BackColor = Color.DarkGray;
            bouton10000Suivant.BackColor = Color.DarkGray;
            boutonSuivantToute.BackColor = Color.DarkGray;

            // Mettre à jour l'état
            boutonsDesactives = true;
        }

        private void ActiverTousBoutons()
        {
            // Restaurer l'apparence des boutons
            bouton1Precedent.BackColor = SystemColors.Window;
            bouton10000Precedent.BackColor = SystemColors.Window;
            boutonPrecedentToute.BackColor = SystemColors.Window;
            bouton1Suivant.BackColor = SystemColors.Window;
            bouton10000Suivant.BackColor = SystemColors.Window;
            boutonSuivantToute.BackColor = SystemColors.Window;

            // Mettre à jour l'état
            boutonsDesactives = false;
        }

        private void AffichageDonnees()
        {
            using (var contexte = new AppDbContext())
            {
                var table = boiteListeAffichageTables.SelectedItem.ToString();
                switch (table)
                {
                    case "departments":
                        var departements = contexte.Departements.OrderBy(d => d.department_id).ToList();
                        indexMax = departements.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            var departements10000 = departements.GetRange(indexMinCourant, nombreAffichages).ToList();
                            grilleDonneesTables.DataSource = departements10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = departements;
                        }
                        break;
                    case "employees":
                        var employes = contexte.Employes.OrderBy(e => e.employee_id).ToList();
                        indexMax = employes.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employes.Count >= 10000)
                        {
                            // Ensuite, on affiche les employés de l'indice minimal courant, à l'indice maximal courant
                            var employees10000 = employes.GetRange(indexMinCourant, nombreAffichages).ToList();
                            grilleDonneesTables.DataSource = employees10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employes;
                        }
                        break;
                    case "employee_projects":
                        var employeProjets = contexte.EmployeProjets.OrderBy(ep => ep.employee_id).ToList();
                        indexMax = employeProjets.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employeProjets.Count >= 10000)
                        {
                            var employeProjets10000 = employeProjets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employeProjets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employeProjets;
                        }
                        break;
                    case "projects":
                        var projets = contexte.Projets.OrderBy(p => p.project_id).ToList();
                        indexMax = projets.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            var projets10000 = projets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = projets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = projets;
                        }
                        break;
                    default:
                        break;
                }

                if (popupDebut)
                    MessageBox.Show("Vous êtes arrivé au début de la liste");

                if (popupFin)
                    MessageBox.Show("Vous êtes arrivé à la fin de la liste");
            }
        }

        private void CorrectionIndexesEtGestionPopup()
        {
            if (indexMinCourant >= indexMax || indexMinCourant + nombreAffichages >= indexMax)
            {
                indexMinCourant = indexMax - nombreAffichages;
                // On fait apparaître un popup après l'affichage des données pour signifier qu'on est à la fin
                popupDebut = false;
                popupFin = true;
            }
            else if (indexMinCourant < indexMin)
            {
                indexMinCourant = 0;
                // On fait apparaître un popup après l'affichage des données pour signifier qu'on est au début
                popupDebut = true;
                popupFin = false;
            }
            else
            {
                // On ne fera apparaître aucun popup
                popupDebut = false;
                popupFin = false;
            }
        }

        private void boutonPrecedentToute_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void bouton10000Precedent_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void bouton1Precedent_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void bouton1Suivant_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void bouton10000Suivant_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void boutonSuivantToute_MouseEnter(object sender, EventArgs e)
        {
            if (boutonsDesactives)
                Cursor = Cursors.No;
            else
                Cursor = Cursors.Hand;
        }

        private void boutonPrecedentToute_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void bouton10000Precedent_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void bouton1Precedent_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void bouton1Suivant_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void bouton10000Suivant_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void boutonSuivantToute_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }

        private void bouton1Precedent_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant -= 1;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton10000Precedent_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant -= 10000;
            nombreAffichages = 10000;

            AffichageDonnees();
        }
        private void bouton10000PrecedentToute_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant = 0;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton1Suivant_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant += 1;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton10000Suivant_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant += 10000;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton10000SuivantToute_Click(object sender, EventArgs e)
        {
            if (boutonsDesactives)
            {
                MessageBox.Show("Veuillez sélectionner une table pour activer les boutons.", "Bouton désactivé", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            indexMinCourant = int.MaxValue;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        /// <summary>
        /// Fonction permettant de se connecter à la base de données afin de charger la liste des tables
        /// </summary>
        private void boutonConnexionBDD_Click(object sender, EventArgs e)
        {
            using (var contexte = new AppDbContext())
            {
                // On charge la liste des tables
                var tables = contexte.Model.GetEntityTypes().Select(t => t.GetTableName()).ToList();
                boiteListeAffichageTables.Items.Clear();
                foreach (var table in tables)
                {
                    boiteListeAffichageTables.Items.Add(table);
                }
            }
        }

        private void boiteListeAffichageTables_SelectedIndexChanged(object sender, EventArgs e)
        {
            nombreAffichages = 10000;
            ActiverTousBoutons();

            // On affiche la table sélectionnée
            using (var contexte = new AppDbContext())
            {
                var table = boiteListeAffichageTables.SelectedItem.ToString();
                switch (table)
                {
                    case "departments":
                        grilleDonneesTables.Columns.Clear();
                        var departements = contexte.Departements.OrderBy(d => d.department_id).ToList();
                        indexMax = departements.Count - 1;
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            indexMinCourant = 0;

                            var departements10000 = departements.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = departements10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = departements;
                        }
                        break;
                    case "employees":
                        grilleDonneesTables.Columns.Clear();
                        var employes = contexte.Employes.OrderBy(e => e.employee_id).ToList();
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employes.Count >= 10000)
                        {
                            indexMinCourant = 0;
                            // Ensuite, on affiche les employés de l'indice minimal courant, à l'indice maximal courant
                            var employes10000 = employes.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employes10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employes;
                        }
                        break;
                    case "employee_projects":
                        grilleDonneesTables.Columns.Clear();
                        var employeProjets = contexte.EmployeProjets.OrderBy(ep => ep.employee_id).ToList();
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employeProjets.Count >= 10000)
                        {
                            indexMinCourant = 0;
                            var employeProjets10000 = employeProjets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employeProjets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employeProjets;
                        }
                        break;
                    case "projects":
                        grilleDonneesTables.Columns.Clear();
                        var projets = contexte.Projets.OrderBy(p => p.project_id).ToList();
                        indexMax = projets.Count - 1;
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            indexMinCourant = 0;
                            var projets10000 = projets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = projets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = projets;
                        }
                        break;
                    default:
                        break;
                }
            }
        }

        private void BoutonValidationChangementsTable_Click(object sender, EventArgs e)
        {

        }

        private void BoutonAjoutEnregistrement_Click(object sender, EventArgs e)
        {

        }
    }
}

Ensuite, j'ai un formulaire comme cela : 
namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    partial class FormAjouterEnregistrement
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Text = "FormulaireAjoutEnregistrement";
        }

        #endregion
    }
}

Je voudrais que lorsque j'appuie sur ajouter un enregistrement, le formulaire ajouté me permette de configurer les valeurs d'un nouvel enregistrement, avec des données correspondant aux 4 classes possibles : 

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    /// <summary>
    /// Classe CDepartement représentant une instance de la table departments de la base de données
    /// </summary>
    [Table("departments", Schema = "public")]
    public class CDepartement
    {
        [Key]
        public int department_id { get; set; }

        public string department_name { get; set; }

        public virtual ICollection<CEmploye>? employes { get; set; } = new List<CEmploye>();
    }
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    /// <summary>
    /// Classe CEmploye représentant une instance de la table employees de la base de données
    /// </summary>
    [Table("employees", Schema = "public")]
    public class CEmploye
    {
        [Key]
        public uint employee_id { get; set; }

        public string first_name { get; set; }
        public string last_name { get; set; }

        public DateTime hire_date { get; set; }

        public int? department_id { get; set; }// Le "?" permet de définir un type nullable

        public decimal salary { get; set; }

        [ForeignKey("department_id")]
        public virtual CDepartement? departement { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    /// <summary>
    /// Classe CEmployeProjet représentant une instance de la table employee_projects de la base de données
    /// </summary>
    [Table("employee_projects", Schema = "public")]
    public class CEmployeProjet
    {
        [Key]
        public int employee_id { get; set; }
        public int project_id { get; set; }
        public string role { get; set; }


    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    /// <summary>
    /// Classe CProjet représentant une instance de la table projects de la base de données
    /// </summary>
    [Table("projects", Schema = "public")]
    public class CProjet
    {
        [Key]
        public int project_id { get; set; }

        public string project_name { get; set; }

        public DateTime start_date { get; set; }

        public DateTime end_date { get; set; }
    }
}
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    public class AppDbContext : DbContext
    {
        public DbSet<CEmploye> Employes { get; set; }
        public DbSet<CDepartement> Departements { get; set; }
        public DbSet<CProjet> Projets { get; set; }
        public DbSet<CEmployeProjet> EmployeProjets { get; set; }

        public static string chaineConnexion = "Host=" + "127.0.0.1" + ";" +
                                               "Port=" + "5432" + ";" +
                                               "Database=" + "postgres" + ";" +
                                               "Username=" + "postgres" + ";" +
                                               "Password=" + "admin";

        public AppDbContext() : base(OptionsConnexionPostgreSQL)
        {

        }

        protected static DbContextOptions OptionsConnexionPostgreSQL
        {
            get
            {
                return new DbContextOptionsBuilder()
                    .UseNpgsql(chaineConnexion)
                    .Options;
            }
        }
    }
}